溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vue自定義指令實(shí)現(xiàn)方法詳解

發(fā)布時(shí)間:2020-10-07 14:04:22 來(lái)源:腳本之家 閱讀:184 作者:cofecode 欄目:web開發(fā)

本文實(shí)例講述了vue自定義指令實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

vue中的指令就是v-on v-bind v-show等等,那么自定義指令是什么呢?

自己定義的指令就是自定義指令。

語(yǔ)法:

Vue.directive(id, definition)

這里可以參考vue中的指令

<h2 v-if="yes">Yes</h2> 其中,if就是指令I(lǐng)D,yes是expression

Vue.directive()傳入接受兩個(gè)參數(shù),id是指指令I(lǐng)D,definition是指定義對(duì)象。其中,定義對(duì)象可以提供一些鉤子函數(shù)。

鉤子函數(shù):

  • bind

- inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用 (僅保證父節(jié)點(diǎn)存在,但不一定已被插入文檔中)。

  • update
  • componentUpdated

    unbind

鉤子函數(shù)參數(shù)

  • el:指令所綁定的元素,可以用來(lái)直接操作 DOM 。
  • binding:一個(gè)對(duì)象,包含以下屬性:

比如 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>
  // 注冊(cè)一個(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>

局部注冊(cè)例子

<!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是不對(duì)的,因?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
       // 通過(guò)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>

希望本文所述對(duì)大家vue.js程序設(shè)計(jì)有所幫助。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI