Vue:自定義指令


在Vue中有很多指令,以v-開頭的命令作用在HTML元素上,將指令綁定在元素上,給綁定的元素添加一些特殊行為。

<span v-if="yes">yes的時候顯示出來</span>  

但有一些是沒有相對應的指令進行操作。在這里以progress(h5的新標簽進度條)為例,向大家介紹Vue的一個用於指令擴展的方法:directive(自定義指令)。

語法如下:

Vue.directive(id, definition)

傳入的兩個參數,id是指指令ID,definition是指定義對象。其中,定義對象可以提供一些鈎子函數。

鈎子函數

鈎子函數   描述
bind       只調用一次,指令第一次綁定到元素時調用,用這個鈎子函數可以定義一個在綁定時執行一次的初始化動作。  
inserted      被綁定元素插入父節點時調用(父節點存在即可調用,不必存在於 document 中)
update 被綁定元素所在的模板更新時調用,而不論綁定值是否變化。通過比較更新前后的綁定值,可以忽略不必要的模板更新
componentUpdated 被綁定元素所在模板完成一次更新周期時調用
unbind 只調用一次,指令與元素解綁時使用

 

 

 

 

 

 

 

 

接下來我們來看一下鈎子函數的參數 (即 elbindingvnode 和 oldVnode)。

指令鈎子函數會被傳入以下參數:

  • el:指令所綁定的元素,可以用來直接操作 DOM 。
  • binding:一個對象,包含以下屬性:
    • 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 編譯生成的虛擬節點。移步 VNode API 來了解更多詳情。
  • oldVnode:上一個虛擬節點,僅在 update 和 componentUpdated 鈎子中可用。

使用例子

<progress value="30" max="40">

progress中存在value和max兩個屬性,當我們要動態獲取數據,並賦值給其對應屬性,發現並不存在這樣的屬性。這樣我們就只能用自定義指令。

然后我們在HTML中調用自己定義的命令,以v-開頭引入。

在很多時候,你可能想在 bind 和 update 時觸發相同行為,而不關心其它的鈎子。比如這樣寫:

Vue.directive("max",function(el,bind){
  el.max=bind.value.max; }) Vue.directive("val",function(el,bind){ el.value=bind.value.max-bind.value.value;
})

官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM