vue.js深入篇(五、自定義指令) ![

原文鏈接:https://baijiahao.baidu.com/s?id=1603883371090691442&wfr=spider&for=pc

image
image
image

簡(jiǎn)介

除了默認(rèn)設(shè)置的核心指令( v-model 和 v-show ),Vue 也允許注冊(cè)自定義指令。注意,在 Vue2.0 里面,代碼復(fù)用的主要形式和抽象是組件——然而,有的情況下,你仍然需要對(duì)純 DOM 元素進(jìn)行底層操作,這時(shí)候就會(huì)用到自定義指令。

下面這個(gè)例子將聚焦一個(gè) input 元素,像這樣:

image

當(dāng)頁面加載時(shí),元素將獲得焦點(diǎn)。事實(shí)上,你訪問后還沒點(diǎn)擊任何內(nèi)容,input 就獲得了焦點(diǎn)?,F(xiàn)在讓我們完善這個(gè)指令:

也可以注冊(cè)局部指令,組件中接受一個(gè) directives 的選項(xiàng):

image

然后你可以在模板中任何元素上使用新的 v-focus 屬性:

image

鉤子函數(shù)

指令定義函數(shù)提供了幾個(gè)鉤子函數(shù)(可選):

bind: 只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用,用這個(gè)鉤子函數(shù)可以定義一個(gè)在綁定時(shí)執(zhí)行一次的初始化動(dòng)作。inserted: 被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在于 document 中)。update: 被綁定元素所在的模板更新時(shí)調(diào)用,而不論綁定值是否變化。通過比較更新前后的綁定值,可以忽略不必要的模板更新(詳細(xì)的鉤子函數(shù)參數(shù)見下)。componentUpdated: 被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。unbind: 只調(diào)用一次, 指令與元素解綁時(shí)調(diào)用。

接下來我們來看一下鉤子函數(shù)的參數(shù) (包括 el,binding,vnode,oldVnode) 。

鉤子函數(shù)參數(shù)

鉤子函數(shù)被賦予了以下參數(shù):

el: 指令所綁定的元素,可以用來直接操作 DOM 。binding: 一個(gè)對(duì)象,包含以下屬性:name: 指令名,不包括 v- 前綴。value: 指令的綁定值, 例如: v-my-directive=”1 + 1”, value 的值是 2。oldValue: 指令綁定的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。expression: 綁定值的字符串形式。 例如 v-my-directive=”1 + 1” ,expression 的值是 “1 + 1”。arg: 傳給指令的參數(shù)。例如 v-my-directive:foo, arg 的值是 “foo”。modifiers: 一個(gè)包含修飾符的對(duì)象。 例如: v-my-directive.foo.bar, 修飾符對(duì)象 modifiers 的值是 { foo: true, bar: true }。vnode: Vue 編譯生成的虛擬節(jié)點(diǎn),查閱 VNode API 了解更多詳情。oldVnode: 上一個(gè)虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。除了 el 之外,其它參數(shù)都應(yīng)該是只讀的,盡量不要修改他們。如果需要在鉤子之間共享數(shù)據(jù),建議通過元素的 dataset 來進(jìn)行。

一個(gè)使用了這些參數(shù)的自定義鉤子樣例:

image

函數(shù)簡(jiǎn)寫

大多數(shù)情況下,我們可能想在 bind 和 update 鉤子上做重復(fù)動(dòng)作,并且不想關(guān)心其它的鉤子函數(shù)。可以這樣寫:

image

對(duì)象字面量

如果指令需要多個(gè)值,可以傳入一個(gè) JavaScript 對(duì)象字面量。記住,指令函數(shù)能夠接受所有合法類型的 Javascript 表達(dá)式。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容