乾貨來了,vue 3 0 自定義指令變化

2021-10-23 23:23:14 字數 1409 閱讀 2568

重新設計定製的指令api,使其更好地符合元件生命週期

元件上的自定義指令使用將遵循與fallthrough行為rfc屬性中討論的相同規則。它將通過v-bind="$attrs"由子元件控制。

const mydirective = ,

inserted() {},

update() {},

componentupdated() {},

unbind() {}

}after

const mydirective = ,

mounted() {},

beforeupdate() {},

updated() {},

beforeunmount() {}, // new

unmounted() {}

}

使自定義指令掛鉤名稱與元件生命週期更加一致。

3.0中,通過片段支援,元件可能有多個根節點。當在具有多個根節點的元件上使用自定義指令時,就會產生問題。

為了解釋自定義指令如何在3.0元件上工作的細節,我們需要首先理解自定義指令是如何在3.0中編譯的。對於這樣的指令:

被編譯成

const vfoo = resolvedirective('foo')

return withdirectives(h('div'), [

[vfoo, bar]

])

其中vfoo將是由使用者編寫的指令物件,它包含掛載和更新這樣的鉤子。

withdirective返回乙個轉殖的vnode,將使用者鉤子封裝並注入為vnode生命週期鉤子(更多細節請參見渲染函式api的變化):

}

因此,自定義指令作為vnode資料的一部分完全包括在內。當在元件上使用自定義指令時,這些onvnode***鉤子作為無關的道具向下傳遞到元件,並最終出現在這個.$attrs中。

這也意味著可以像模板一樣直接連線到元素的生命週期中,這在定製指令太複雜的時候很方便:

這與vuejs/rfcs#26中討論的屬性fallthrough行為一致。因此,元件上的定製指令規則與其他無關屬性相同:由子元件決定在何處以及是否應用它。當子元件在內部元素上使用v-bind="$attrs"時,它也會應用在它上面的任何定製指令

Vue自定義指令

vue有很多內建的指令,比如說v on,v model,v clock等等,每乙個指令會完成一定的功能,但是這些內建的指令總會有些侷限性,要是能夠自定義指令就好了 vue的自定義指令分類 全域性指令和區域性指令 vue指令的定義和用法 以全域性指令為例 1.語法 vue.directive 指令id...

vue自定義指令

自定義指令主要有兩種方式。一是在元件裡以directives的選項來自定義指令的內容。這樣的自定義指令是區域性的自定義指令,只在當前的元件裡面才能使用。script export default directives arr arr.join el.style.csstext arr script ...

VUE 自定義指令

dom插入便獲取焦點 vue.directive focus 根據指令的值決定自否獲取焦點 vue.directive focus 注 被拖拽的元素必須有定位樣式 vue.directive drag function el,binding document.nm useup function 拓展...