vue除了提供一些核心指令,還允許使用者自定義屬性。
一般使用vue時(shí)不建議直接對(duì)DOM進(jìn)行操作,但有的時(shí)候仍然需要對(duì)普通DOM元素進(jìn)行底層操作,這時(shí)候就要用到自定義屬性了。
(在需要操作DOM的時(shí)候,考慮是否需要使用指令來實(shí)現(xiàn))
Vue.directive('指令名稱', {
//配置參數(shù)
//只會(huì)調(diào)用一次,當(dāng)指令綁定到當(dāng)前元素上時(shí)使用
bind([el, binding]){},
//當(dāng)元素被插入到父節(jié)點(diǎn)的時(shí)候使用(渲染時(shí))
inserted([el, binding]){},
//當(dāng)指令對(duì)應(yīng)的數(shù)據(jù)發(fā)生改變時(shí)
update([el, binding]),
//在所有DOM都更新之后
componentUpdated([el, binding]){},
//指令與元素解綁的時(shí)候
unbind([el, binding]){}
}
自定義指令中的bind, inserted, update, unbind都是鉤子函數(shù),只寫需要使用的就可以了。
鉤子函數(shù)的參數(shù)
el: 當(dāng)前元素
binding:一個(gè)對(duì)象,包含以下屬性:
???? name(binding.name):指令名,不包括 v- 前綴。
???? value(binding.value):指令的綁定值,例如:v-my-directive="1 + 1" 中,綁定值為 2。
???? oldValue:指令綁定的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
???? expression:字符串形式的指令表達(dá)式。例如 v-my-directive="1 + 1" 中,表達(dá)式為 "1 + 1"。
???? arg(binding.arg):傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。
???? modifiers(binding.modifiers):一個(gè)包含修飾符的對(duì)象。例如:v-my-directive.foo.bar 中,修飾符對(duì)象為 { foo: true, bar: true }。
舉個(gè)栗子:
//name: myon
//arg: click
//expression: clickFn
//value: f
<button v-myon:click="clickFn">button</button>