理解Vue2.x和Vue3.x自定義指令用法及鉤子函數(shù)原理
Vue2.x用法
全局注冊(cè)
Vue.directive( 指令名, { 自定義指令生命周期 } )
局部注冊(cè)
directives: { 指令名, { 自定義指令生命周期 } }
使用
v-指令名: 屬性名.修飾符=“value值”

鉤子函數(shù)
bind - 自定義指令綁定到 DOM 后調(diào)用. 只調(diào)用一次, 注意: 只是加入進(jìn)了DOM, 但是渲染沒有完成
inserted - 自定義指令所在DOM, 插入到父 DOM 后調(diào)用, 渲染已完成(最最重要)
update - 元素更新, 但子元素尚未更新, 將調(diào)用此鉤子( 自定義指令所在組件更新時(shí)執(zhí)行, 但是不保證更新完成 ) —> 和自定義所在組件有關(guān)
componentUpdated - 組件和子級(jí)更新后執(zhí)行( 自定義指令所在組件更新完成, 且子組件也完成更新 ),
—> 和自定義所在組件有關(guān)
unbind - 解綁(銷毀) .( 自定義指令所在 DOM 銷毀時(shí)執(zhí)行 ). 只調(diào)用一次
鉤子函數(shù)的參數(shù)
注意: 自定義指令中, 都不能直接使用this
1.el: 當(dāng)前指令所在的dom元素。
2.binding: 是一個(gè)對(duì)象, 表示當(dāng)前指令上的屬性、修飾符、value值等信息。只有value最重要, 常用
arg:String, 屬性名 。例如 v-my-directive:foo 中,屬性名為 “foo”。
modifiers:Object, 包含所有修飾符的一個(gè)對(duì)象。例如:v-my-directive.foo.bar 中,修飾符對(duì)象為 { foo: true, bar: true }。
name:String, 指令名,不包括 v- 前綴。
rawName, String, 完整指令名,例如 v-my-directive:foo.bar=“1 + 1” 中, 完整指令名就是 v-my-directive:foo.bar=“1 + 1”
value:Any, 指令綁定的當(dāng)前值,例如:v-my-directive=“1 + 1” 中,綁定值為 2。(最最重要)
expression:String, 解析的哪一個(gè)值、表達(dá)式。例如 v-my-directive=“1 + 1” 中,表達(dá)式為 “1 + 1”。
oldValue:Any, 指令綁定的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
oldArg:Any, 指令屬性名的前一個(gè)值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
3.vnode:當(dāng)前節(jié)點(diǎn)信息, 可以獲取, 當(dāng)前指令所在組件的實(shí)例 vnode.context - 當(dāng)前指令所在的實(shí)例對(duì)象
4.oldVnode:上一個(gè)虛擬節(jié)點(diǎn),僅在 update 和 componentUpdated 鉤子中可用。
Vue3.x用法
用法和 Vue2.x 一樣
全局注冊(cè)
Vue.directive( 指令名, { 自定義指令生命周期 } )
局部注冊(cè)
directives: { 指令名, { 自定義指令生命周期 } }
使用
v-指令名: 屬性名.修飾符=“value值”
以插件的形式, 進(jìn)行全局注冊(cè)

鉤子函數(shù)
較 Vue2.x 相比, 鉤子函數(shù)有變化
最終的 API 如下:
const MyDirective = {
created(el, binding, vnode, prevVnode) {}, // 新增
beforeMount() {},
mounted() {},
beforeUpdate() {}, // 新增
updated() {},
beforeUnmount() {}, // 新增
unmounted() {}
}
created - 自定義指令所在組件, 創(chuàng)建后
beforeMount - 就是Vue2.x中的 bind, 自定義指令綁定到 DOM 后調(diào)用. 只調(diào)用一次, 注意: 只是加入進(jìn)了DOM, 但是渲染沒有完成
mounted - 就是Vue2.x中的 inserted, 自定義指令所在DOM, 插入到父 DOM 后調(diào)用, 渲染已完成(最最重要)
beforeUpdate - 自定義指令所在 DOM, 更新之前調(diào)用
updated - 就是Vue2.x中的 componentUpdated
beforeUnmount - 銷毀前
unmounted - 銷毀后
以上就是理解Vue2.x和Vue3.x自定義指令用法及鉤子函數(shù)原理的詳細(xì)內(nèi)容,更多關(guān)于Vue2.x和Vue3.x的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣
這篇文章主要為大家詳細(xì)介紹了Vue如何利用高德地圖API實(shí)現(xiàn)實(shí)時(shí)天氣,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
vue項(xiàng)目搭建以及全家桶的使用詳細(xì)教程(小結(jié))
這篇文章主要介紹了vue項(xiàng)目搭建以及全家桶的使用詳細(xì)教程(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Vue 實(shí)現(xiàn)列表動(dòng)態(tài)添加和刪除的兩種方法小結(jié)
今天小編就為大家分享一篇Vue 實(shí)現(xiàn)列表動(dòng)態(tài)添加和刪除的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09
vue項(xiàng)目中頁面跳轉(zhuǎn)傳參的方法總結(jié)
在Vue項(xiàng)目中,你可以使用路由(vue-router)來實(shí)現(xiàn)頁面跳轉(zhuǎn)并傳遞參數(shù),這篇文章主要為大家整理了一些常用的方法,感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11
vue2.0開發(fā)實(shí)踐總結(jié)之入門篇
這篇文章主要為大家總結(jié)了vue2.0開發(fā)實(shí)踐之入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Vue.js頁面驗(yàn)證跳轉(zhuǎn)功能實(shí)現(xiàn)
這篇文章主要介紹了Vue.js頁面驗(yàn)證跳轉(zhuǎn)功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04

