vue自定義指令實現(xiàn)方法詳解
本文實例講述了vue自定義指令實現(xiàn)方法。分享給大家供大家參考,具體如下:
vue中的指令就是v-on v-bind v-show等等,那么自定義指令是什么呢?
自己定義的指令就是自定義指令。
語法:
Vue.directive(id, definition)
這里可以參考vue中的指令
<h1 v-if="yes">Yes</h1> 其中,if就是指令ID,yes是expression
Vue.directive()傳入接受兩個參數,id是指指令ID,definition是指定義對象。其中,定義對象可以提供一些鉤子函數。
鉤子函數:
- bind
- inserted:被綁定元素插入父節(jié)點時調用 (僅保證父節(jié)點存在,但不一定已被插入文檔中)。
- update
- componentUpdated
unbind
鉤子函數參數
- el:指令所綁定的元素,可以用來直接操作 DOM 。
- binding:一個對象,包含以下屬性:
比如 name, value ,expression ,rawName等等
為了更好的操作DOM
例子如下,讓p標簽的顏色變成紅色。給p標簽加入了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>
// 注冊一個全局的自定義指令
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>
比如給側邊欄做一個鼠標滾輪事件。
但是,這樣需要兼容寫法,粗暴的給元素添加onmousewheel是不對的,因為在火狐瀏覽器下根本不會執(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">我是側邊欄</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程序設計有所幫助。
相關文章
vue中el-tree動態(tài)初始默認選中和全選實現(xiàn)方法
這篇文章主要給大家介紹了關于vue中el-tree動態(tài)初始默認選中和全選實現(xiàn)的相關資料,eltree默認選中eltree是一種常用的樹形控件,通常用于在網頁上呈現(xiàn)樹形結構的數據,例如文件夾、目錄、組織結構等,需要的朋友可以參考下2023-09-09
Vue中組件(Component)和插件(Plugin)的區(qū)別及說明
這篇文章主要介紹了Vue中組件(Component)和插件(Plugin)的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
vue+Vue Router多級側導航切換路由(頁面)的實現(xiàn)代碼
這篇文章主要介紹了vue+Vue Router多級側導航切換路由(頁面)的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
vue中改變選中當前項的顯示隱藏或者狀態(tài)的實現(xiàn)方法
下面小編就為大家分享一篇vue中改變選中當前項的顯示隱藏或者狀態(tài)的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
antd vue 刷新保留當前頁面路由,保留選中菜單,保留menu選中操作
這篇文章主要介紹了antd vue 刷新保留當前頁面路由,保留選中菜單,保留menu選中操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

