聲明自定義指令:
let Opt = {
bind:function(el,binding,vnode){ },
inserted:function(el,binding,vnode){ },
update:function(el,binding,vnode){ },
componentUpdated:function(el,binding,vnode){ },
unbind:function(el,binding,vnode){ },
}
bind:只調(diào)用一次,指令第一次綁定到元素時(shí),用這個(gè)鉤子函數(shù)可以定義一個(gè)在綁定時(shí)執(zhí)行一次的初始化動(dòng)作。
inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在與document中)
update:被綁定的元素所在的模板更新時(shí)調(diào)用,而不論綁定值是否變化。通過(guò)比較更新前后的綁定值,可以忽略不必要的模板更新
componentUpdated:被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。
unbind:只調(diào)用一次,指令與元素解綁時(shí)調(diào)用。
鉤子函數(shù)參數(shù)有:
el:指令所綁定的元素,可以用來(lái)直接操作DOM
bindng:一個(gè)對(duì)象,包含以下屬性
1)name:指令名,不包含v-前綴
2)value:指令的綁定值,例如:v-my-directive=“1+1”,value的值就是2
3)oldValue:指令綁定的前一個(gè)值,僅在update和componentUpdated鉤子中可用,無(wú)論值是否改變都可用
4)expression:綁定值的表達(dá)式或變量名。例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。
5)arg:傳給指令的參數(shù)。例如v-my-directive:foo,arg的值是foo
6)modifiers:一個(gè)包含修飾符的對(duì)象。例如: v-my-directive.foo.bar, 修飾符對(duì)象 modifiers 的值是 { foo: true, bar: true }。
vnode:vue編譯生成的虛擬節(jié)點(diǎn)
oldVnode:上一個(gè)虛擬節(jié)點(diǎn),僅在update和componentUpdated鉤子中可用,