Vue進階九十一):自定義指令

      網友投稿 809 2025-04-02

      除了核心功能默認內置的指令 (v-model 和 v-show),Vue 也允許注冊自定義指令。有的情況下,對普通 DOM 元素進行底層操作,這時候就會用到自定義指令。

      如何聲明自定義指令?

      就像vue中有全局組件和局部組件一樣,他也分全局自定義指令和局部自定義指令。

      let Opt = { bind:function(el,binding,vnode){ }, inserted:function(el,binding,vnode){ }, update:function(el,binding,vnode){ }, componentUpdated:function(el,binding,vnode){ }, unbind:function(el,binding,vnode){ }, }

      1

      2

      3

      4

      5

      6

      7

      對于全局自定義指令的創建,我們需要使用 Vue.directive接口

      Vue.directive('demo', Opt)

      1

      在單獨JS文件demoDirective.js中定義好以上自定義指令后,然后在main.js入口文件中加以引入即可,

      import './directive/demoDirective.js'

      1

      接下來即可在需要應用的組件中應用,應用示例如下所示:

      1

      對于局部組件,我們需要在組件的鉤子函數directives中進行聲明

      Directives: { Demo:Opt }

      1

      2

      3

      Vue中的指令可以簡寫,上面Opt是一個對象,包含了5個鉤子函數,我們可以根據需要只寫其中幾個函數。如果你想在 bind 和 update 時觸發相同行為,而不關心其它的鉤子,那么你可以將Opt改為一個函數。

      let Opt = function(el,binding,vnode){ }

      1

      下面定義了一個v-test指令綁定數據name。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      我們可以全局自定義一個指令v-red,來修改HTML元素的背景色為紅色:

      Vue進階(九十一):自定義指令

      hello welcome

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      鉤子函數

      一個指令定義對象可以提供如下幾個鉤子函數 (均為可選):

      inserted:被綁定元素插入父節點時調用 (僅保證父節點存在,但不一定已被插入文檔中)。

      bind:只調用一次,指令第一次綁定到元素時調用。在這里可以進行一次性的初始化設置。

      update:所在組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前。指令的值可能發生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)。

      componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調用。

      unbind:只調用一次,指令與元素解綁時調用。

      指令鉤子函數會被傳入以下參數:

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

      binding:一個對象,包含以下屬性:

      name:指令名,不包括 v- 前綴。

      value:指令的綁定值,例如:v-my-directive=“1 + 1” 中,綁定值為 2。

      oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。

      expression:字符串形式的指令表達式。例如 v-my-directive=“1 + 1” 中,表達式為 “1 + 1”。

      arg:傳給指令的參數,可選。例如 v-my-directive:foo 中,參數為 “foo”。

      modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。

      vnode: Vue編譯生成的虛擬節點。移步 VNode API 來了解更多詳情。

      oldVnode:上一個虛擬節點,僅在 update 和 componentUpdated 鉤子中可用。

      Vue

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:向普通函數傳遞類成員函數指針的問題
      下一篇:取色器滴管不見,修復后也無效
      相關文章
      亚洲日本va中文字幕久久| 亚洲中文字幕久久精品无码APP| 亚洲码国产精品高潮在线| 亚洲国产精品综合久久网络| 亚洲а∨精品天堂在线| 亚洲午夜精品久久久久久app| 精品丝袜国产自在线拍亚洲| 亚洲影视自拍揄拍愉拍| 色在线亚洲视频www| 亚洲国产成人精品激情| 亚洲色丰满少妇高潮18p| 学生妹亚洲一区二区| 亚洲另类无码专区丝袜| 久久久久久久久无码精品亚洲日韩| 在线观看国产一区亚洲bd| 免费观看亚洲人成网站| 亚洲不卡无码av中文字幕| 亚洲AV无码成H人在线观看| 亚洲国产中文v高清在线观看| 亚洲国产天堂久久久久久| 亚洲国产电影av在线网址| 亚洲人成电影网站国产精品| 国产亚洲情侣一区二区无码AV| 亚洲综合另类小说色区| 亚洲日韩中文字幕在线播放| 国产V亚洲V天堂无码| 亚洲精品无码不卡| 亚洲精品国产福利在线观看| 亚洲人成日本在线观看| 亚洲精品午夜国产va久久| 亚洲熟妇AV一区二区三区宅男| 亚洲精华国产精华精华液好用| 99亚洲精品卡2卡三卡4卡2卡| 亚洲一区日韩高清中文字幕亚洲| 国产AV无码专区亚洲AV毛网站| 图图资源网亚洲综合网站| 亚洲女人初试黑人巨高清| 亚洲真人无码永久在线观看| 国产精品亚洲天堂| 国产亚洲精品久久久久秋霞| 久久精品国产精品亚洲艾|