VUE進階

一、Vue.directive 自定義組件

1.鉤子函數(生命週期)

(1)bind:只調用一次,指令第一次綁定到元素時調用。

(2)inserted:被綁定元素插入父節點時調用 (僅保證父節點存在,但不一定已被插入文檔中)。

(3)update:所在組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前

(4)componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新後調用。

(5)unbind:只調用一次,指令與元素解綁時調用。

2.鉤子函數參數

  • el: 指令所綁定的元素,可以用來直接操作DOM。
  • binding: 一個對象,包含指令的很多信息。
  • vnode: Vue編譯生成的虛擬節點。

 

例子:給指定元素字體設置顏色

<template>
	<div>
		<p v-setmycolor="mycolor">123</p>
	</div>
</template>
<script>
export default {
	data(){
		return {
			mycolor: 'red',
			foo: 'backgroundColor'
		}
	},
	directives:{
		setmycolor: {
			bind: function(el, binding, vnode, oldVnode) {
				console.log(el); // <p>123</p>
				console.log(binding); //expression:"mycolor",name:setmycolor,rawName:"v-setmycolor",value:"red"
				console.log(vnode);
				console.log(oldVnode);
				el.style.color = binding.value;
			}
		}
	}
}
</script>
<style>
	
</style>

 

3.動態參數

例子:指定元素自定義屬性設置顏色:v-setmycolor:[foo]="mycolor"

<template>
	<div>
		<p v-setmycolor:[foo]="mycolor">123</p>
	</div>
</template>
<script>
export default {
	data(){
		return {
			mycolor: 'red',
			foo: 'backgroundColor'
		}
	},
	directives:{
		setmycolor: {
			bind: function(el, binding, vnode, oldVnode) {
				console.log(el); // <p>123</p>
				console.log(binding); //arg: "backgroundColor",expression:"mycolor",name:setmycolor,rawName:"v-setmycolor:[foo]",value:"red"
				console.log(vnode);
				console.log(oldVnode);
				el.style[binding.arg] = binding.value;
			}
		}
	}
}
</script>
<style>
	
</style>

 

4.簡寫

在 bind 和 update 時觸發相同行爲,可簡寫:

<template>
	<div>
		<p v-setmycolor:[foo]="mycolor">123</p>
	</div>
</template>
<script>
export default {
	data(){
		return {
			mycolor: 'red',
			foo: 'backgroundColor'
		}
	},
	directives:{
		setmycolor: function(el, binding, vnode, oldVnode) {
			console.log(el); // <p>123</p>
			console.log(binding); //arg: "backgroundColor",expression:"mycolor",name:setmycolor,rawName:"v-setmycolor:[foo]",value:"red"
			console.log(vnode);
			console.log(oldVnode);
			el.style[binding.arg] = binding.value;
		}
	}
}
</script>
<style>
	
</style>

 

二、Vue.set全局操作

Vue.set 的作用就是在構造器外部操作構造器內部的數據、屬性或者方法。

由於Javascript的限制,Vue不能自動檢測以下變動的構造器外部數組。

  • 當你利用索引直接設置一個項時,vue不會爲我們自動更新視圖。
  • 當你修改數組的長度時,vue不會爲我們自動更新視圖。

 但使用Vue.set操作該數組時,vue會自動更新視圖。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="../assets/js/vue.js"></script>
    <title>Vue.set 全局操作</title>
</head>
<body>
    <h1>Vue.set 全局操作</h1>
    <hr>
    <div id="app">
        <ul>
            <li v-for=" aa in arr">{{aa}}</li>
        </ul>
       
    </div>
    <button οnclick="add()">外部添加</button>
 
    <script type="text/javascript">
     
        function add(){
            console.log("我已經執行了");
           app.arr[1]='ddd';
           //Vue.set(app.arr,1,'ddd');
        }
        var outData={
            arr:['aaa','bbb','ccc']
        };
        var app=new Vue({
            el:'#app',
            data:outData
        })
    </script>
</body>
</html>

 

三、事件修飾符.native:監聽組件根元素的原生事件

 

 

四、Mixins

作用:

  1. 在你已經寫好了構造器後,需要增加方法或者臨時的活動時使用的方法,這時用混入會減少源代碼的污染。
  2. 很多地方都會用到的公用方法,用混入的方法可以減少代碼量,實現代碼重用.

 規則:

  1. 當數據和方法重名時,組件數據和方法優先
  2. 當生命週期重複時,合併,先執行混合對象中的生命週期,再執行組件中的
<template>
	<div>
		<p>{{num}}</p>
		<button @click="add">加1</button>
	</div>
</template>
<script>
var addLog = {
	data() {
		return  {
			num:2 //重名的數據被忽略
		}
	},
	updated() { //重名的生命週期先執行
		console.log(this.num);  
	},
	methods:{
		add() { //重名的方法被忽略
			console.log('混入的方法'); 
		}
	}
}
export default {
	data() {
		return  {
			num:1
		}
	},
	methods:{
		add() {
			this.num ++;
		}
	},
	updated() {
		console.log('原本的數據');
	},
	mixins:[addLog]
}
</script>
<style>
	
</style>

 

全局引入:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章