友快網

導航選單

建立你自己的 vue 自定義指令

在 Vue 中,指令是用來直接編輯 DOM 的一種好方法。你肯定熟悉 vue 中的  , , 這些指令。

vue 自定義指令是,正如你可能猜到的那樣,Vue的方式讓我們為我們的專案構建其他指令。它們是在專案中新增獨特和可重複使用的功能的好方法。

Vue 自定義指令是 Vue 讓我們為自己的專案構建附加指令的方式。它們用來在專案中新增獨特且可重用的功能。

Vue 自定義指令可以操縱元素以及 DOM 中的響應性處理。

什麼是自定義指令

自定義指令是一種能讓你的專案適合你需求的方法。你可能會注意到 vue 外掛經常使用自定義指令。

例如,在 V-Lazy Plugin 中用了 指令來新增自定義功能,使影象載入更有效。使用指令是最好的情況,因為我們要直接編輯DOM。

你可能會問:難道我不能只註冊 compute 和 watcher 之類的元件選項嗎?

可以。但是,儘管元件選項對於抽象和程式碼重用很有用,但自定義指令仍然是直接操作 DOM 元素的最好方法之一 。

一個指令有五個 hook

像元件及其生命週期 hook 一樣,每個VUE指令都有自己的 hook 觸發

Vue 2和 Vue 3 中,指令hook也有所不同。

以下是 Vue 2 指令 hook:

bind

– 當指令繫結到元素時呼叫一次

inserted

– 當繫結元素插入其父節點時

update

– 當元素更新時(但還沒有任何子元素)

componentUpdated

– 子元素也更新後

unbind

– 當指令與元素解除繫結時呼叫一次

以下是Vue 3指令 hook:

created

– 在應用元素的屬性或事件偵聽器之前呼叫。

beforeMount

– 與 vue2 的 bind 相同

mounted

– 與 vue2 的 inserted 相同

beforeUpdate

– 在元素本身更新之前呼叫(如生命週期 hook)

updated

– 與 vue2 的 ComponentUpdated 相同

beforeUnmount

– 在解除安裝元素之前呼叫(如生命週期 hook)

unmounted

–與 vue2 的 unbind 相同

在實現這些鉤子時,它們都有一些可以接受的引數。

el

– 指令繫結到此元素上,讓你可以修改它

binding

– 一個包含很多屬性的物件;後面詳細解釋

vnode

– 虛擬節點

prevVnode

– 上一個虛擬節點(僅在 update hook 中提供)

Vue 指令的文件 中說明,你應該將這些引數(除了 el)看作是隻讀的,切勿修改。

插播廣告,推薦一個有意思的公眾號

繫結物件(Binding Object)

繫結物件包含幾個屬性,可幫助你為 hook 新增功能。

name

– 指令的名稱(沒有 字首)

value

– 傳遞給指令的值

oldvalue

– 指令之前的值(僅在 update hook 中提供)

expression

– 繫結到字串的表示式(例如:, )

arg

– 傳遞給字串的引數(例如:, )

modifiers

– 作為物件傳遞的所有修飾符(例如:, )

定義你的指令

在我們的 main。js 檔案或者任何你定義 Vue 例項的地方——只需要使用 Vue 2 中的 方法或 Vue 3 中的 方法

現在讓我們建立一個名為 v-font-size的指令,用來操縱元件的字型大小。

在 中新增一些偵聽 BeForeMount 和 update 的 hook 程式碼並調整字型大小。

然後在元件檔案中只需要新增以下兩行,就可以在操作中找我們的元件。每當我們宣告指令時,都可以使用字首 來訪問它。

還有另一種定義 Vue 指令的方法。也可以在main。js。中使用這種語法:

如果傳遞的是函式而不是物件,則它將在 bind 和 update hook 期間執行。

無論你用哪種方法,結果應該是這樣:

現在完成了第一個自定義指令,下面讓我們更進一步。

將引數傳遞給你的指令

有幾種方法可以增加對指令的控制。可以透過傳遞額外的值、引數或修飾符來完成。

對於前面的例子,假設我們希望更好地控制元素中的字型大小。

傳值 - 用於響應式資料

傳遞資料最直觀的方式就是簡單地給它一個值。這允許指令在值被更改時響應更新,同時也提供了最靈活的控制,因為可以接受各種值(任何字型大小)。

在你的元件中,宣告看起來像這樣:

在你的指令中,你需要修改方法以使用來自繫結物件的值。

向指令傳送引數

如果不需要任何響應性,只需要一種方法來為你的指令提供多個選項。那就是引數。

指令中的程式碼就是這樣:

然後在我們的模板中:

使用修飾器

修飾符類似於引數,因為它們不適合響應性。但是當與引數結合使用時,你可以建立一個高度自定義的系統。

這是因為你可以在指令上應用多個修飾器。

首先在我們的指令中實現它們。 和 的順序僅取決於你希望優先使用哪些修飾符。

然後可以在模板中使用:

效果如下:

強力推薦前端面試刷題神器

上一篇:史上最霸氣的三首開國太祖帝王詩
下一篇:小耶美圖| 可自由裁切的桌布