### Vue.directive自定義指令
我們在基礎部分就學習了內部指令,我們也可以定義一些屬于自己的指令,比如我們要定義一個v-bizzbee的指令,作用就是讓文字變成綠色。
在自定義指令前我們寫一個小功能,在頁面上有一個數字為10,數字的下面有一個按鈕,我們每點擊一次按鈕后,數字加1.
~~~javascript
var app=new Vue({
el:'#app',
data:{
num:10,
color:'green'
},
methods:{
add:function(){
this.num++;
}
}
})
~~~
~~~html
<div id="app">
<div v-jspang="color" id="demo">
{{num}}
</div>
<div>
<button @click="add">Add</button>
</div>
</div>
~~~
寫好了這個功能,我們現在就自己定義一個全局的指令。我們這里使用`Vue.directive( )`;
~~~javascript
Vue.directive('bizzbee',function(el,binding,vnode){
el.style='color:'+binding.value;
});
var app=new Vue({
el:'#app',
data:{
num:10,
color:'green'
},
methods:{
add:function(){
this.num++;
}
~~~
~~~html
<div id="app">
<div v-bizzbee="color" id="demo">
{{num}}
</div>
<div>
<button @click="add">Add</button>
</div>
</div>
~~~
可以看到數字已經變成了綠色,說明自定義指令起到了作用。
### 自定義指令中傳遞的三個參數
* el: 指令所綁定的元素,可以用來直接操作 DOM。
* binding: 一個對象,包含指令的很多信息。
* vnode: Vue編譯生成的虛擬節點。
### 自定義指令的生命周期
自定義指令有五個生命周期(也叫鉤子函數),分別是 bind,inserted,update,componentUpdated,unbind
* bind:只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個綁定時執行一次的初始化動作。
* inserted:被綁定元素插入父節點時調用(父節點存在即可調用,不必存在于document中)。
* update:被綁定于元素所在的模板更新時調用,而無論綁定值是否變化。通過比較更新前后的綁定值,可以忽略不必要的模板更新。
* componentUpdated:被綁定元素所在模板完成一次更新周期時調用。
* unbind:只調用一次,指令與元素解綁時調用。
~~~javascript
bind:function(){//被綁定
console.log('1 - bind');
},
inserted:function(){//綁定到節點
console.log('2 - inserted');
},
update:function(){//組件更新
console.log('3 - update');
},
componentUpdated:function(){//組件更新完成
console.log('4 - componentUpdated');
},
unbind:function(){//解綁
console.log('1 - unbind');
}
~~~