溫馨提示×

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

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

Vue.directive中怎么自定義指令

發(fā)布時(shí)間:2021-06-17 15:47:10 來源:億速云 閱讀:109 作者:Leah 欄目:web開發(fā)

Vue.directive中怎么自定義指令,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

一、什么是全局API?

全局API并不在構(gòu)造器里,而是先聲明全局變量或者直接在Vue上定義一些新功能,Vue內(nèi)置了一些全局API,比如我們今天要學(xué)習(xí)的指令Vue.directive。說的簡單些就是,在構(gòu)造器外部用Vue提供給我們的API函數(shù)來定義新的功能。

二、Vue.directive自定義指令

我們?cè)诘谝患揪蛯W(xué)習(xí)了內(nèi)部指令,我們也可以定義一些屬于自己的指令,比如我們要定義一個(gè)v-jspang的指令,作用就是讓文字變成綠色。

在自定義指令前我們寫一個(gè)小功能,在頁面上有一個(gè)數(shù)字為10,數(shù)字的下面有一個(gè)按鈕,我們每點(diǎn)擊一次按鈕后,數(shù)字加1.

三、自定義指令中傳遞的三個(gè)參數(shù)

el: 指令所綁定的元素,可以用來直接操作DOM。

binding:  一個(gè)對(duì)象,包含指令的很多信息。

vnode: Vue編譯生成的虛擬節(jié)點(diǎn)。

四、自定義指令的生命周期

自定義指令有五個(gè)生命周期(也叫鉤子函數(shù)),分別是 bind,inserted,update,componentUpdated,unbind

  1. bind:只調(diào)用一次,指令第一次綁定到元素時(shí)調(diào)用,用這個(gè)鉤子函數(shù)可以定義一個(gè)綁定時(shí)執(zhí)行一次的初始化動(dòng)作。

  2. inserted:被綁定元素插入父節(jié)點(diǎn)時(shí)調(diào)用(父節(jié)點(diǎn)存在即可調(diào)用,不必存在于document中)。

  3. update:被綁定于元素所在的模板更新時(shí)調(diào)用,而無論綁定值是否變化。通過比較更新前后的綁定值,可以忽略不必要的模板更新。

  4. componentUpdated:被綁定元素所在模板完成一次更新周期時(shí)調(diào)用。

  5. unbind:只調(diào)用一次,指令與元素解綁時(shí)調(diào)用。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <script type="text/javascript" src="../assets/js/vue.js"></script>
  <title>vue.directive 自定義指令</title>
</head>
<body>
  <h2>vue.directive 自定義指令</h2>
  <hr>
  <div id="app">
    <div v-jspang="color" id="aaa">
      {{num}}
    </div>
    <p>
      <button @click='jia'>加分</button>
    </p>
    <p>
      <button onclick='unbind()'>解綁</button>
    </p>
  </div>
 
  <script type="text/javascript">
 
    function unbind(){
      app.$destroy();
    }
 
    //自定義指令
    Vue.directive('jspang',{
      bind:function(el,binding,vnode){//被綁定
        /**
            var s=JSON.stringify;
            el.innerHTML = 
              'name:'    + s(binding.name) +'<br>' + 
              'value:'    + s(binding.value) +'<br>' + 
              'expression:' + s(binding.expression) +'<br>' ;
        **/
        el.style='color:'+binding.value;
         
 
        console.log('1 - bind');
      },
      inserted:function(){//綁定到節(jié)點(diǎn)
        console.log('2 - inserted');
      },
      update:function(){//組件更新
        console.log('3 - update');
      },
      componentUpdated:function(){//組件更新完成
        console.log('4 - componentUpdated');
      },
      unbind:function(){//解綁
        console.log('5 - unbind');
      }
 
    })
 
    var app=new Vue({
      el:'#app',
      data:{
        color:'green',
        num:10
      },
      methods:{
        jia:function(){
          this.num++;
        }
      }
    })
  </script>
</body>
</html>
bind:function(){//被綁定
   console.log('1 - bind');
},
inserted:function(){//綁定到節(jié)點(diǎn)
   console.log('2 - inserted');
},
update:function(){//組件更新
   console.log('3 - update');
},
componentUpdated:function(){//組件更新完成
   console.log('4 - componentUpdated');
},
unbind:function(){//解綁
   console.log('1 - bind');
}

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

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

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

AI