自定義指令
- 為什么要自定義指令
- 自定義指令的語法規則
- 鉤子函式
- 鉤子函式的引數
- 自定義指令的使用
- 帶引數的自定義指令的使用
- 自定義區域指令的使用
為什么要自定義指令
Vue的內置指令不滿足我們的需求
自定義指令的語法規則
使用Vue.directiveAPI去自定義指令
-
用法——以獲取焦點舉例
// 注冊一個全域自定義指令 `v-focus` Vue.directive('focus', { // 當被系結的元素插入到 DOM 中時…… inserted: function (el) { // 聚焦元素 el.focus() } })第一個引數為
指令名稱,第二個引數為一個物件,物件里使用鉤子函式去定義功能
鉤子函式
一個指令定義物件可以提供如下幾個鉤子函式 (均為可選):
bind:只呼叫一次,指令第一次系結到元素時呼叫,在這里可以進行一次性的初始化設定,inserted:被系結元素插入父節點時呼叫 (僅保證父節點存在,但不一定已被插入檔案中),update:所在組件的 VNode 更新時呼叫,但是可能發生在其子 VNode 更新之前,指令的值可能發生了改變,也可能沒有,但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函式引數見下),componentUpdated:指令所在組件的VNde及其子VNode全部更新后呼叫unbind:只呼叫一次,指令與元素解綁時呼叫
更多內容 -> 官網教程
鉤子函式的引數
指令鉤子函式會被傳入以下引數:
el:指所系結的元素,可以用來直接操作DOMbinding:一個物件,包含一下property:name:指令名,不包括v-前綴value:指令的系結值,例如:v-my-directive="1 + 1"中,系結值為2,系結值也可以為一個物件oldValue:指令系結的前一個值,僅在update和componentUpdated鉤子函式中可用,無論值是否改變都可以用expression:字串形式的指令運算式,例如v-my-directive="1 + 1"中,運算式為"1 + 1"arg:傳給指令的引數,可選,v-my-directive:foo中,引數為:"foo"modifiers:一個包含修飾符的物件,例如v-my-directive.foo.bar中,修飾符物件為{foo:true, bar: true}
vnode:Vue編譯生產的虛擬節點oldVnode:上一個虛擬節點,僅在update和componentUpdated鉤子函式中可用
自定義指令的使用
-
獲取焦點指令
<div id='app'> <input type="text" v-focus> </div>Vue.directive('focus', { inserted: function(el) { el.focus(); } }) var vm = new Vue({ el: '#app', data: { } });
帶引數的自定義指令的使用
-
初始化標簽背景色
<div id='app'> <input type="button" value="按鈕" v-color="obj"> </div>Vue.directive('color', { bind: function(el, binding) { el.style.backgroundColor = binding.value.color; } }); var vm = new Vue({ el: '#app', data: { obj: { color: 'skyblue' } } });obj為data屬性里的元素
自定義區域指令的使用
var vm = new Vue({
el: '#app',
data: {
obj: {
color: 'skyblue'
}
},
directives: {
focus: {
inserted: function(el) {
el.focus();
},
},
color: {
bind: function(el, binding) {
el.style.backgroundColor = binding.value.color;
}
}
}
});
放到Vue的實體物件里,屬性名為directives,自定義多個指令用逗號分隔開
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/259749.html
標籤:其他
下一篇:關于CSS的簡單總結
