2019-09-16 - Vue - 自定義指令

源自:https://cn.vuejs.org/v2/guide/index.html

鉤子函數(shù)

一個指令定義對象可以提供如下幾個鉤子函數(shù) (均為可選):

bind:只調(diào)用一次,指令第一次綁定到元素時調(diào)用。在這里可以進行一次性的初始化設(shè)置。
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ù),指令鉤子函數(shù)會被傳入以下參數(shù):

el:指令所綁定的元素,可以用來直接操作 DOM 。
binding:一個對象,包含以下屬性:
? ? name:指令名,不包括 v- 前綴。
? ? value:指令的綁定值,例如:v-my-directive="1 + 1" 中,綁定值為 2。
????oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
????expression:字符串形式的指令表達式。例如 v-my-directive="1 + 1" 中,表達式為 "1 + 1"。
????arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。
????modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。?
vnode:Vue 編譯生成的虛擬節(jié)點。移步 VNode API 來了解更多詳情。
oldVnode:上一個虛擬節(jié)點,僅在 update 和 componentUpdated 鉤子中可用。

注意:除了?el?之外,其它參數(shù)都應(yīng)該是只讀的,切勿進行修改。如果需要在鉤子之間共享數(shù)據(jù),建議通過元素的?dataset?來進行。

<div id="hook-arguments-example" v-demo:foo.a.b="message"></div>

Vue.directive('demo', { bind: function (el, binding, vnode) {
?var s = JSON.stringify el.innerHTML =
?'name: ' + s(binding.name) + '<br>' +
?'value: ' + s(binding.value) + '<br>' +
?'expression: ' + s(binding.expression) + '<br>' +
?'argument: ' + s(binding.arg) + '<br>' +
?'modifiers: ' + s(binding.modifiers) + '<br>' +
?'vnode keys: ' + Object.keys(vnode).join(', ')
?}})
new Vue({ el: '#hook-arguments-example', data: { message: 'hello!' }})


Vue directive result

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

<div v-demo="{ color: 'white', text: 'hello!' }"></div>

Vue.directive('demo', function (el, binding) {
?console.log(binding.value.color) // => "white"
?console.log(binding.value.text) // => "hello!"
?})

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

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

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