vue的自定義指令

1.自定義指令

1.1 什么是自定義指令

vue官方提供了v-text、v-html、v-model、v-if等一些常用的指令。除此之外vue還允許開發(fā)者自定義指令。

1.2 自定義指令的分類

vue將自定義指令分為 兩類

  • 私有自定義指令
  • 全局自定義指令

1.3 私有自定義指令

在每個(gè)vue組件中,可以在directives節(jié)點(diǎn)下聲明私有自定義指令

  • 私有自定義指令只在這個(gè)組件中生效

示例代碼如下:

 directives: {
    color: {
      bind(el) {
        el.style.color = "red";
      },
    },
  },
  • color:指定的是指令的名稱,使用的時(shí)候要加前面加個(gè)v-,v-color
  • bind:只會調(diào)用一次,是指 指令第一次綁定到元素時(shí)會調(diào)用 (bind函數(shù)觸發(fā)的時(shí)機(jī)是指令第一次綁定到元素身上時(shí)觸發(fā)
  • el:是指綁定的這個(gè)dom元素本身
  • v-color這個(gè)指令的作用就是給指定dom元素設(shè)置字體顏色為紅色

使用如下:

90.png

實(shí)現(xiàn)效果:

91.png
1.3.1 獲取指令綁定的值 binding
92.png

控制臺輸出

93.png
  • name:指令的名稱
  • rawName:指令的全稱
  • value:指定綁定的值

所以我們可以通過第二個(gè)參數(shù)的屬性value(參數(shù)名隨便取,只要符合標(biāo)識符的規(guī)則)來動(dòng)態(tài)設(shè)置值,而設(shè)置一個(gè)固定的值。

所以可以將指令修改為:

 directives: {
    color: {
      bind(el, binding) {
        el.style.color = binding.value;
      },
    },
  },

具體實(shí)現(xiàn)效果如下:

94.png
1.3.2 update函數(shù)(頁面數(shù)據(jù)發(fā)生更新,會觸發(fā)這個(gè)函數(shù))
  • 但第一次指令綁定到元素身上時(shí)不會觸發(fā)update函數(shù),只有后續(xù)更新才會觸發(fā)這個(gè)update函數(shù),bind函數(shù)和update函數(shù)的參數(shù)列表是一樣的。
95.png
1.3.3 函數(shù)簡寫

如果bind函數(shù)和update函數(shù)中的邏輯完全相同,則對象格式的自定義指令可以簡寫為函數(shù)格式

96.png

等價(jià)于下面的這些代碼:

97.png

1.4 全局自定義指令

全局共享的自定義指令需要通過 Vue.directive()進(jìn)行聲明

// 第一個(gè)參數(shù)為字符串,指令的名稱
// 第二個(gè)參數(shù)是一個(gè)對象,用于接收指令的參數(shù)值
Vue.directive("color",{
  bind(el,binding){
    el.style.color=binding.value;
  },
  update(el,binding){
    el.style.color=binding.value;
  }
})

以下是上面的代碼簡寫的形式(因?yàn)閎ind和update的邏輯處理是一致的):將bind函數(shù)和update函數(shù)寫在一塊了

// 第一個(gè)參數(shù)為字符串,指令的名稱
// 第二個(gè)參數(shù)是一個(gè)對象,用于接收指令的參數(shù)值
Vue.directive("color",function(el,binding){
  el.style.color=binding.value;
})

2. 總結(jié)

自定義指令.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容