1在孝、局部指令定義
范圍:僅限于定義時關聯(lián)的 vue 實例的容器中使用
-
定義:
new Vue({ directives:{ key[string]:value[Fuction] } })
- key(string):指令名稱 吮便,定義完成后嫉你,頁面使用需
v-
前綴調用指令- 如果名稱為駝峰命名方式 (例如 imgLazy) ,頁面使用時需要轉換為 連字符 (v-img-lazy)
- value(Function):
function( el遇伞,binding地熄,newVnode,oldVnode ){}
指令執(zhí)行函數- el : 調用指令的當前DOM對象
- binding : 是一個對象 测蹲,對象中包含了指令構成參數像屋、修飾符资铡、取值 ……
- name: 指令名稱
- rawName: 指令調用時的表達式
- expression: 指令取值表單時电禀,
=
右側的取值表達式 - arg: 指令參數 ,
:
后定義的參數名稱 - oldArg: 是指令 : 后定義的 舊的參數名稱
- value: 指令 = 右側 表達式的計算結果
- oldValue:指令綁定變量發(fā)生變化后,調用該方法時 笤休,存儲的 上次的結果值
- modifiers: 指令修飾符尖飞,
.
后定義的修飾符名稱- modifiers 為 Object{ key:value } 類型數據
-
key 為修飾符名稱,value取值 為 true
- true 作為value表示當前指令被啟用
- 對象中沒有修飾符key ,表示指令不啟用
- 當沒有修飾符時,表示該對象為空對象
- newVnode:指令更新后的新虛擬DOM
- oldVnode:指令更新前的舊虛擬DOM
- key(string):指令名稱 吮便,定義完成后嫉你,頁面使用需
使用:
<標簽 v-自定義指令名[:參數][.修飾符.修飾符……][=取值] ></標簽>
2政基、全局指令定義
范圍:可以在 vue 的 任意對象的容器中使用
-
語法:
Vue.directive( id,definition )
- id=name : 定義指令名稱
- definition :指令的處理函數贞铣,
function( el,binding沮明,newVnode,oldVnode ){}
- 參數參考 局部指令
-
定義:全局指令定義必須在使用之前
Vue.directive("lazy",function( el辕坝,binding,newVnode,oldVnode ){ })
3荐健、指令生命周期
- 一個指令從項目運行開始酱畅,到指令運行結束過程,vue為每個指令都提供固定的生命周期鉤子函數
-
bind
:只調用一次摧扇,指令第一次綁定到元素時調用圣贸。在這里可以進行一次性的初始化設置。 -
inserted
:被綁定元素插入父節(jié)點時調用 (僅保證父節(jié)點存在扛稽,但不一定已被插入文檔中)吁峻。 -
update
:所在組件的 VNode 更新時調用,但是可能發(fā)生在其子 VNode 更新之前在张。指令的值可能發(fā)生了改變用含,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)帮匾。 -
componentUpdated
:指令所在組件的 VNode 及其子 VNode 全部更新后調用啄骇。 -
unbind
:只調用一次,指令與元素解綁時調用瘟斜。
-
- 無論是全局指令定義缸夹,還是局部指令定以,definition取值可以為 Function 也可以為 Object
- 取值 Function螺句,定義功能就是指令的處理函數
- 取值Object虽惭,定義的時指令的生命周期鉤子函數的處理方法