在 Vue 中,自定義指令可以讓你在模板中使用 v-directiveName 這樣的語法來調用自己定義的指令。自定義指令可以用來操作 DOM 元素,給元素綁定事件監聽器,或者進行其他自定義操作。

Vue.directive 函數來註冊一個指令。該函數接受兩個參數,第一個參數是指令的名稱,第二個參數是一個對象,用來定義指令的行為。

下面是一個自定義指令的例子:

Vue.directive('my-directive', {
  bind: function (el, binding) {
    // 在綁定時進行一些初始化操作
    el.style.color = binding.value;
  },
  update: function (el, binding) {
    // 在元素更新時對元素進行操作
    el.style.color = binding.value;
  }
});

        在這個例子中,我們定義了一個名為 my-directive 的指令,它會在綁定和更新時都將元素的顏色設置為指令的綁定值。

bind update 兩個鈎子函數。bind 鈎子函數會在元素第一次被綁定時執行,而 update 鈎子函數會在元素數據更新時執行。

常用的指令鈎子函數:

  • bind(el, binding, vnode):指令第一次綁定到元素時調用,只調用一次,可以進行一些初始化操作。el 是指令綁定的元素,binding 是指令的綁定對象,vnode 是虛擬節點,可以用來訪問節點的其他屬性。
  • inserted(el, binding, vnode):被綁定元素插入父節點時調用(僅保證父節點存在,但不一定已被插入文檔中),可以進行一些需要操作 DOM 的初始化操作。
  • update(el, binding, vnode, oldVnode):指令所在的組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前,可以對元素進行更新操作。但是可能之前的值和現在的值相同,可以通過 binding.valuebinding.oldValue 來比較值的變化情況。
  • componentUpdated(el, binding, vnode, oldVnode):指令所在的組件的 VNode 及其子 VNode 全部更新後調用,可以對元素進行更新操作。
  • unbind(el, binding, vnode):指令與元素解綁時調用,只調用一次,可以進行一些清理操作。

v-directiveName