vue自定義指令實(shí)現(xiàn)方法詳解
本文實(shí)例講述了vue自定義指令實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
vue中的指令就是v-on v-bind v-show等等,那么自定義指令是什么呢?
自己定義的指令就是自定義指令。
語法:
Vue.directive(id, definition)
這里可以參考vue中的指令
<h1 v-if="yes">Yes</h1> 其中,if就是指令I(lǐng)D,yes是expression
Vue.directive()傳入接受兩個(gè)參數(shù),id是指指令I(lǐng)D,definition是指定義對象。其中,定義對象可以提供一些鉤子函數(shù)。
鉤子函數(shù):
- bind
- inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。
- update
- componentUpdated
unbind
鉤子函數(shù)參數(shù)
- el:指令所綁定的元素,可以用來直接操作 DOM 。
- binding:一個(gè)對象,包含以下屬性:
比如 name, value ,expression ,rawName等等
為了更好的操作DOM
例子如下,讓p標(biāo)簽的顏色變成紅色。給p標(biāo)簽加入了v-color 的自定義指令。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<p v-color="red">我是自定義指令</p> red綁定到data里面的變量
<p v-color="'blue'">我是自定義指令</p> 也支持字符串
</div>
<script src='vue.js'></script>
<script>
// 注冊一個(gè)全局的自定義指令
Vue.directive('color', {
inserted: function (el,binding) {
console.log(el,binding)
el.style.color = binding.value
}
})
new Vue({
el:'#app',
data:{
red:'red'
}
})
</script>
</body>
</html>
局部注冊例子
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<p v-color="red">我是自定義指令</p>
</div>
<script src='vue.js'></script>
<script>
new Vue({
el:'#app',
data:{
red:'red'
},
directives: {
color: {
// 指令的定義
inserted: function (el,binding) {
el.style.color = binding.value
}
}
}
})
</script>
</body>
</html>
比如給側(cè)邊欄做一個(gè)鼠標(biāo)滾輪事件。
但是,這樣需要兼容寫法,粗暴的給元素添加onmousewheel是不對的,因?yàn)樵诨鸷鼮g覽器下根本不會(huì)執(zhí)行。
怎么辦?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
#scrollwrap {
width:200px;
height:800px;
background: #ccc;
}
</style>
</head>
<body>
<div id="app">
<div id="scrollwrap" v-scrollfn="mousewheel">我是側(cè)邊欄</div>
</div>
<script src='vue.js'></script>
<script>
new Vue({
el:'#app',
data:{
red:'red',
mousewheel: '滾輪事件'
},
directives: {
scrollfn: {
// 指令的定義
inserted: function (el,binding) {
var userAgent = window.navigator.userAgent
// 通過userAgent拿到
if (userAgent.indexOf('Firefox')> -1) {
console.log('是火狐瀏覽器')
el.addEventListener('DOMMouseScroll',function (e){
console.log(e.detail)
})
} else {
console.log('不是火狐')
el.addEventListener('mousewheel',function (e){
console.log(e.wheelDelta)
})
}
}
}
}
})
</script>
</body>
</html>
希望本文所述對大家vue.js程序設(shè)計(jì)有所幫助。
相關(guān)文章
vue中el-tree動(dòng)態(tài)初始默認(rèn)選中和全選實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于vue中el-tree動(dòng)態(tài)初始默認(rèn)選中和全選實(shí)現(xiàn)的相關(guān)資料,eltree默認(rèn)選中eltree是一種常用的樹形控件,通常用于在網(wǎng)頁上呈現(xiàn)樹形結(jié)構(gòu)的數(shù)據(jù),例如文件夾、目錄、組織結(jié)構(gòu)等,需要的朋友可以參考下2023-09-09
Vue中組件(Component)和插件(Plugin)的區(qū)別及說明
這篇文章主要介紹了Vue中組件(Component)和插件(Plugin)的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
vue+Vue Router多級側(cè)導(dǎo)航切換路由(頁面)的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue+Vue Router多級側(cè)導(dǎo)航切換路由(頁面)的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12
Vue2.0設(shè)置全局樣式(less/sass和css)
這篇文章主要為大家詳細(xì)介紹了Vue2.0設(shè)置全局樣式(less/sass和css),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
vue中改變選中當(dāng)前項(xiàng)的顯示隱藏或者狀態(tài)的實(shí)現(xiàn)方法
下面小編就為大家分享一篇vue中改變選中當(dāng)前項(xiàng)的顯示隱藏或者狀態(tài)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
antd vue 刷新保留當(dāng)前頁面路由,保留選中菜單,保留menu選中操作
這篇文章主要介紹了antd vue 刷新保留當(dāng)前頁面路由,保留選中菜單,保留menu選中操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue+echarts定時(shí)重新繪制以達(dá)到刷新的動(dòng)效問題
這篇文章主要介紹了vue+echarts定時(shí)重新繪制以達(dá)到刷新的動(dòng)效問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
vue-devtools 打開源碼位置實(shí)現(xiàn)過程
這篇文章主要為大家介紹了vue-devtools 打開源碼位置實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

