directives: 用于自定義vue指令
注冊全局自定義指令:調(diào)directive(id, fun)
// 注冊一個全局自定義指令 `v-focus`
Vue.directive('focus', {
// 當被綁定的元素插入到 DOM 中時……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
注冊局部自定義指令:在組件中定義, 是一個directives對象
directives: {
focus: {
// 指令的定義
inserted: function (el) {
el.focus()
}
}
}
directives的鉤子函數(shù)
bind: 只調(diào)用一次,指令第一次綁定到元素時調(diào)用。在這里可以進行一次性的初始化設置。
inserted: 被綁定元素插入父節(jié)點時調(diào)用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。
update: :所在組件的 VNode 更新時調(diào)用,但是可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數(shù)參數(shù)見下)。
componentUpdated: 指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。
unbind: 只調(diào)用一次,指令與元素解綁時調(diào)用。
鉤子函數(shù)的參數(shù):
-
el: 指令所綁定的元素, 用來直接操作dom -
binding: 一個對象包含以下屬性:
1name: 指令名, 不包括v- 前綴
2value: 指令綁定的值
3oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
4expression:字符串形式的指令表達式。例如 v-my-directive="1 + 1" 中,表達式為 "1 + 1"。
5arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。
6modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。 -
vnode:Vue 編譯生成的虛擬節(jié)點。移步
來了解更多詳情。 -
oldVnode:上一個虛擬節(jié)點,僅在
update和componentUpdated鉤子中可用。
除了
el之外,其它參數(shù)都應該是只讀的,切勿進行修改。如果需要在鉤子之間共享數(shù)據(jù),建議通過元素的dataset來進行。