Vue中directive的鉤子函數(shù)(bind,inserted等)用法及使用說明
Vue中directive的鉤子函數(shù)(bind,inserted等)用法
在 Vue 里,指令(directive)是個(gè)超實(shí)用的東西,它能讓你在不改動(dòng)組件邏輯的情況下,給 HTML 元素添加一些特殊的行為。Vue 指令有好幾個(gè)鉤子函數(shù),下面我就挨個(gè)給你講講這些鉤子函數(shù)的作用和使用場(chǎng)景,還會(huì)附上帶注釋的代碼示例。
1.bind鉤子函數(shù)
- 作用:
bind鉤子函數(shù)會(huì)在指令第一次綁定到元素上時(shí)調(diào)用,而且只調(diào)用一次。這時(shí)候你可以做一些初始化的操作,比如設(shè)置一些默認(rèn)值、添加事件監(jiān)聽器之類的。 - 使用場(chǎng)景:當(dāng)你需要在指令綁定到元素時(shí)就進(jìn)行一些初始化操作,就可以用
bind鉤子函數(shù)。
// 自定義一個(gè)名為 'focus' 的指令
Vue.directive('focus', {
// bind 鉤子函數(shù),在指令第一次綁定到元素時(shí)調(diào)用
bind: function (el) {
// 給元素添加一個(gè)自定義屬性,用于標(biāo)記這個(gè)元素被綁定了 focus 指令
el.setAttribute('data-focus', 'true');
// 打印一條消息,提示指令已經(jīng)綁定到元素上
console.log('指令已綁定到元素上');
}
});
// 創(chuàng)建一個(gè) Vue 實(shí)例
new Vue({
el: '#app',
template: '<input v-focus>'
});
2.inserted鉤子函數(shù)
- 作用:
inserted鉤子函數(shù)會(huì)在綁定元素被插入到父節(jié)點(diǎn)時(shí)調(diào)用。注意,這里的父節(jié)點(diǎn)必須是存在于 DOM 中的。 - 使用場(chǎng)景:當(dāng)你需要在元素插入到 DOM 后做一些操作,比如自動(dòng)聚焦、添加動(dòng)畫效果等,就可以用
inserted鉤子函數(shù)。
// 自定義一個(gè)名為 'focus' 的指令
Vue.directive('focus', {
// inserted 鉤子函數(shù),在綁定元素被插入到父節(jié)點(diǎn)時(shí)調(diào)用
inserted: function (el) {
// 讓元素自動(dòng)獲得焦點(diǎn)
el.focus();
// 打印一條消息,提示元素已經(jīng)插入到 DOM 中
console.log('元素已插入到 DOM 中');
}
});
// 創(chuàng)建一個(gè) Vue 實(shí)例
new Vue({
el: '#app',
template: '<input v-focus>'
});
3.update鉤子函數(shù)
- 作用:
update鉤子函數(shù)會(huì)在包含組件的 VNode 更新時(shí)調(diào)用,但可能發(fā)生在其子 VNode 更新之前。指令的值可能發(fā)生了改變,也可能沒有。 - 使用場(chǎng)景:當(dāng)你需要在組件更新時(shí)對(duì)指令綁定的元素做一些操作,就可以用
update鉤子函數(shù)。
// 自定義一個(gè)名為 'highlight' 的指令
Vue.directive('highlight', {
// update 鉤子函數(shù),在包含組件的 VNode 更新時(shí)調(diào)用
update: function (el, binding) {
// 獲取指令的值
const color = binding.value;
// 設(shè)置元素的背景顏色為指令的值
el.style.backgroundColor = color;
// 打印一條消息,提示元素的背景顏色已更新
console.log('元素的背景顏色已更新');
}
});
// 創(chuàng)建一個(gè) Vue 實(shí)例
new Vue({
el: '#app',
data: {
// 定義一個(gè)變量,用于存儲(chǔ)背景顏色
highlightColor: 'yellow'
},
template: '<div v-highlight="highlightColor">這是一個(gè)高亮的 div</div>'
});
4.componentUpdated鉤子函數(shù)
- 作用:
componentUpdated鉤子函數(shù)會(huì)在包含組件的 VNode 及其子 VNode 全部更新后調(diào)用。 - 使用場(chǎng)景:當(dāng)你需要在組件和其子組件都更新完成后對(duì)指令綁定的元素做一些操作,就可以用
componentUpdated鉤子函數(shù)。
// 自定義一個(gè)名為 'highlight' 的指令
Vue.directive('highlight', {
// componentUpdated 鉤子函數(shù),在包含組件的 VNode 及其子 VNode 全部更新后調(diào)用
componentUpdated: function (el, binding) {
// 獲取指令的值
const color = binding.value;
// 設(shè)置元素的背景顏色為指令的值
el.style.backgroundColor = color;
// 打印一條消息,提示元素的背景顏色已在組件更新后更新
console.log('元素的背景顏色已在組件更新后更新');
}
});
// 創(chuàng)建一個(gè) Vue 實(shí)例
new Vue({
el: '#app',
data: {
// 定義一個(gè)變量,用于存儲(chǔ)背景顏色
highlightColor: 'yellow'
},
template: '<div v-highlight="highlightColor">這是一個(gè)高亮的 div</div>'
});
5.unbind鉤子函數(shù)
- 作用:
unbind鉤子函數(shù)會(huì)在指令與元素解綁時(shí)調(diào)用,而且只調(diào)用一次。這時(shí)候你可以做一些清理工作,比如移除事件監(jiān)聽器。 - 使用場(chǎng)景:當(dāng)你需要在指令與元素解綁時(shí)做一些清理工作,就可以用
unbind鉤子函數(shù)。
// 自定義一個(gè)名為 'click-outside' 的指令
Vue.directive('click-outside', {
// bind 鉤子函數(shù),在指令第一次綁定到元素時(shí)調(diào)用
bind: function (el, binding, vnode) {
// 定義一個(gè)點(diǎn)擊事件處理函數(shù)
el.clickOutsideEvent = function (event) {
// 判斷點(diǎn)擊事件是否發(fā)生在元素外部
if (!(el === event.target || el.contains(event.target))) {
// 如果點(diǎn)擊事件發(fā)生在元素外部,調(diào)用指令綁定的方法
vnode.context[binding.expression](event);
}
};
// 給 document 添加點(diǎn)擊事件監(jiān)聽器
document.addEventListener('click', el.clickOutsideEvent);
},
// unbind 鉤子函數(shù),在指令與元素解綁時(shí)調(diào)用
unbind: function (el) {
// 移除 document 上的點(diǎn)擊事件監(jiān)聽器
document.removeEventListener('click', el.clickOutsideEvent);
// 刪除元素上的點(diǎn)擊事件處理函數(shù)
delete el.clickOutsideEvent;
// 打印一條消息,提示指令已與元素解綁
console.log('指令已與元素解綁');
}
});
// 創(chuàng)建一個(gè) Vue 實(shí)例
new Vue({
el: '#app',
methods: {
// 定義一個(gè)方法,用于處理點(diǎn)擊元素外部的事件
handleClickOutside: function () {
console.log('點(diǎn)擊了元素外部');
}
},
template: '<div v-click-outside="handleClickOutside">點(diǎn)擊這個(gè) div 外部試試</div>'
});
這些鉤子函數(shù)能讓你在不同的階段對(duì)指令綁定的元素進(jìn)行操作,大大增強(qiáng)了 Vue 指令的靈活性。你可以根據(jù)具體的需求選擇合適的鉤子函數(shù)來使用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VsCode工具開發(fā)vue項(xiàng)目必裝插件清單(推薦!)
對(duì)于很多使用vscode編寫vue項(xiàng)目的新手同學(xué)來說,可能不知道使用什么插件,下面這篇文章主要給大家介紹了關(guān)于VsCode工具開發(fā)vue項(xiàng)目必裝插件的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
vue3中setup語法糖下父子組件間傳遞數(shù)據(jù)的方式
Vue3中父組件指的是包含一個(gè)或多個(gè)子組件的組件,它們通過props和事件等方式來傳遞數(shù)據(jù)和通信,這篇文章主要介紹了vue3中setup語法糖下父子組件間傳遞數(shù)據(jù)的方式,需要的朋友可以參考下2023-06-06
vue-cli3項(xiàng)目生產(chǎn)和測(cè)試環(huán)境分包后文件名和數(shù)量不一致解決
這篇文章主要為大家介紹了vue-cli3項(xiàng)目生產(chǎn)和測(cè)試環(huán)境分包后文件名和數(shù)量不一致解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
vue3 elementPlus 表格實(shí)現(xiàn)行列拖拽及列檢索功能(完整代碼)
本文通過實(shí)例代碼給大家介紹vue3 elementPlus 表格實(shí)現(xiàn)行列拖拽及列檢索功能,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10
ElementUI?$notify通知方法中渲染自定義組件實(shí)現(xiàn)
這篇文章主要為大家介紹了ElementUI?$notify通知方法中渲染自定義組件實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
vue學(xué)習(xí)筆記之過濾器的基本使用方法實(shí)例分析
這篇文章主要介紹了vue學(xué)習(xí)筆記之過濾器的基本使用方法,結(jié)合實(shí)例形式分析了vue.js過濾器的基本功能、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
用electron 打包發(fā)布集成vue2.0項(xiàng)目的操作過程
這篇文章主要介紹了用electron 打包發(fā)布集成vue2.0項(xiàng)目的操作步驟,把electron 加入到自己項(xiàng)目中各種不兼容,升級(jí)版本踩坑無數(shù)個(gè),今天通過本文給大家分享下詳細(xì)過程,需要的朋友可以參考下2022-10-10
electron-vue?項(xiàng)目添加啟動(dòng)loading動(dòng)畫的實(shí)現(xiàn)思路
electron-vue腳手架搭建的項(xiàng)目,在開發(fā)階段可能你注意不到項(xiàng)目啟動(dòng)慢的問題,但是在build?生成的exe可執(zhí)行文件,啟動(dòng)后,要反應(yīng)很久才能進(jìn)入到app.vue?中加載的頁面,體驗(yàn)性很差,本文給大家介紹electron?vue啟動(dòng)動(dòng)畫效果的實(shí)例代碼,感興趣的朋友一起看看吧2022-01-01

