vue自定義指令

>> 閱讀官網(wǎng)

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

全局指令

// 注冊(cè)一個(gè)全局自定義指令 v-focus
Vue.directive('focus', {
    // 當(dāng)綁定元素插入到 DOM 中。
    inserted: function (el) {
        // 聚焦元素
        el.focus()
    }
})

局部指令

var app = new Vue({
    el: '#box',
    directives: {
        focus: {
              // 指令的定義---
        }
    }
});

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

<input v-focus>

鉤子函數(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:所在組件的 VNode 更新時(shí)調(diào)用,但是可能發(fā)生在其孩子的 VNode 更新之前。指令的值可能發(fā)生了改變也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細(xì)的鉤子函數(shù)參數(shù)見下)。
  • componentUpdated:所在組件的 VNode 及其孩子的 VNode 全部更新時(shí)調(diào)用。
  • unbind:只調(diào)用一次,指令與元素解綁時(shí)調(diào)用。
    接下來我們來看一下鉤子函數(shù)的參數(shù) (包括 el,binding,vnode,oldVnode)。

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

(這里只寫最常用的兩個(gè))

  • el:指令所綁定的元素,可以用來直接操作 DOM 。
  • binding:一個(gè)對(duì)象,包含以下屬性:
    ···· name:指令名,不包括 v- 前綴。
    ···· value:指令的綁定值,例如:v-my-directive="1 + 1", value 的值是 2。

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

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

Vue.directive('color-swatch', function (el, binding) {
    el.style.backgroundColor = binding.value
})

對(duì)象字面量

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

<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)容合作請(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)容

  • 自定義指令 Vue.js已經(jīng)為我們提供了很多默認(rèn)的指令,例如:v-for、v-if、v-bind、v-on等,這些...
    懶人成長(zhǎng)閱讀 1,136評(píng)論 0 2
  • Vue指令 Vue的指令以v-開頭,作用在HTML元素上,將指令綁定在元素上,給綁定的元素添加一些特殊行為。 例如...
    syd192閱讀 1,369評(píng)論 0 9
  • vue官方文檔中介紹了兩種自定義指令的方法:全局自定義和局部自定義。 全局自定義組件可以在main.js中直接注冊(cè)...
    Erric_Zhang閱讀 450評(píng)論 2 1
  • Vue.directive (自定義指令) 使用方法,類似v-model等內(nèi)置指令,2.0的為了提升性能,所以在指...
    夢(mèng)之卿知閱讀 5,721評(píng)論 1 1
  • 9.8……52天 【體驗(yàn)入】 今天忙碌的一天,每個(gè)人都知道自己做什么,忙而不亂。晚上下班開主管會(huì)議,議題是各部門流...
    呂志萍閱讀 523評(píng)論 0 2

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