Vue自定義指令

vue官方文檔中介紹了兩種自定義指令的方法:全局自定義局部自定義。

全局自定義組件可以在main.js中直接注冊(cè)。領(lǐng)用directive方法:

// 自定義一個(gè)全局自定義指令 v-addOne

Vue.directive("addOne",{
? ? ? ? bind: function(){
? ? ? ? ? ? ? ? //只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用,用這個(gè)鉤子函數(shù)可以定義一個(gè)在綁定時(shí)執(zhí)行一次的初始化動(dòng)作。
? ? ? ? },
? ? ? ? inserted: function(){
? ? ? ? ? ? ? ? //被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在于 document 中)
? ? ? ?},

? ? ? ? update: function(){

? ? ? ? ? ? ? ? ? ? ? // 被綁定元素所在的模板更新時(shí)調(diào)用,而不論綁定值是否變化。通過(guò)比較更新前后的綁定值,可以忽略不必要的模板更新

? ? ? ? },
? ? ? ? componentUpdated: function(){

? ? ? ? ? ? ? ? ? ? //被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。

? ? ? ? },
? ? ? ?unbind: function(){

? ? ? ? ? ? ? ? ? ? // 只調(diào)用一次, 指令與元素解綁時(shí)調(diào)用。

? ? ? ? }
})

結(jié)構(gòu)模板中使用: <div v-addOne></div>

局部自定義組件:在組件中添加一個(gè)directives選項(xiàng):

directives: {

? ? ? ? ?addOne:{

? ? ? ? ? ? ? ?// 里面和全局注冊(cè)的鉤子函數(shù)一樣

? ? ? ? ? ?}

}

若是自定義的指令只使用update時(shí),直接傳入函數(shù)即可,如下:

Vue.directive('my-directive',function(){
? ? ? ? ? // ............
})

自動(dòng)獲取input焦點(diǎn)的示例

//注冊(cè)一個(gè)全局自定義指令v-focus

html部分:<input v-focus>

Vue.directive('focus', {

? ? ? ? ?// 當(dāng)綁定元素插入到DOM中

? ? ? ? ?inserted: function (el) {

? ? ? ? ? ? ? ? ? // 聚焦元素

? ? ? ? ? ? ? ? ? el.focus()

? ? ? ? ? }

});

var app = new Vue({

? ? ? ? el: '#app'

});

當(dāng)指令需要多個(gè)值時(shí)也可以傳入一個(gè)字面量對(duì)象

<div id="hook-arguments-example" ?v-demo-directive="{ color: 'white', text: 'hello!' }"></div>

Vue.directive('demoDirective', function(el, binding, vnode){

? ? ? ? ? ?console.log(binding.value.color);

? ? ? ? ? ?console.log(binding.value.text);

});

var demo = new Vue({

? ? ? ? ? ?el: '#hook-arguments-example'

})

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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