自定義指令

指令就是在inserted上操作dom元素

全局注冊

// 注冊在整個大Vue上
Vue.directive('focous', {
    // 當(dāng)被綁定的元素插入到DOM中時
    inserted: function(el) {
        el.focus() // 聚焦元素      
    }
})

局部注冊

directives: {
    founs: {
        inserted: function(el) {
            el.focus()
        }
    }
}

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

  • bind: 只能調(diào)用一次,指令第一次綁定到元素時調(diào)用,可以進行初始化配置
  • inserted: 被綁定元素插入父節(jié)點時調(diào)用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。
  • update: 所在組件的 VNode 更新時調(diào)用
  • componentUpdated: 指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用
  • unbind: 只調(diào)用一次,指令與元素解綁時調(diào)用。

每個鉤子函數(shù)都有下面的參數(shù) bind(el, binding, vnode, oldVnode)

參數(shù)

  • el: 指令所綁定的元素,可以用來直接操作 DOM。
  • binding: 一個對象,包含以下屬性
    • name: 指令名
    • value: 指令綁定的值 v-my-directive="1 + 1" 中的 2
    • oldValue: 指令綁定的前一個值,傳給指令的值 僅在 updatecomponentUpdated 鉤子中可用
    • expression: 字符串形式的指令表達式 ‘1+1’
    • arg: 傳遞給指令的參數(shù) v-my-directive:foo => foo
    • modifiers: 一個包含裝飾符的對象。v-my-directive.foo.bar => { foo: true, bar: true }
    • vnode: Vue編譯生成的虛擬節(jié)點
    • oldVnode: 上一個虛擬節(jié)點,僅在 updatecomponentUpdated 鉤子中可用

渲染函數(shù)中的自定義指令

// 自定義指令是個數(shù)組,每個對象都是一個自定義指令
directives: [
    {
      name: 'my-custom-directive',
      value: '2', // 傳遞給指令的值
      expression: '1 + 1', // 傳遞給指令的表達式
      arg: 'foo', // 傳遞給指令的變量
      modifiers: { // 傳遞給指令的修飾符
        bar: true
      }
    }
  ]
  • 在渲染函數(shù)中可以寫一個方法把 一個指令變成directives 數(shù)組對象的形式 _vm'loading=${loading}'
?著作權(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)容