Vue自定義指令

2021-09-07 14:12:52 字數 2803 閱讀 1140

除了預設設定的核心指令(v-modelv-show),vue 也允許註冊自定義指令。在vue裡,**復用的主要形式和抽象是元件。然而,有的情況下,仍然需要對純 dom 元素進行底層操作,這時候就會用到自定義指令。本文將詳細介紹vue自定義指令

以乙個input元素自動獲得焦點為例,當頁面載入時,使用autofocus可以讓元素將獲得焦點 。但是autofocus在移動版safari上不工作。現在註冊乙個使元素自動獲取焦點的指令

指令註冊類似於元件註冊,包括全域性指令和區域性指令兩種

【全域性指令】

使用vue.diretive()來全域性註冊指令

//

註冊乙個全域性自定義指令 v-focus

vue.directive('focus',

})

【區域性指令】

也可以註冊區域性指令,元件或vue建構函式中接受乙個directives的選項

var vm = new vue(      

}}})

然後可以在模板中任何元素上使用新的v-focus屬性

<

div

id="example"

>

<

input

v-focus

>

div>

<

script

>

//註冊乙個全域性自定義指令 v-focus

指令定義函式提供了幾個鉤子函式(可選) 

【bind】

只呼叫一次,指令第一次繫結到元素時呼叫,用這個鉤子函式可以定義乙個在繫結時執行一次的初始化動作

【inserted】

被繫結元素插入父節點時呼叫(父節點存在即可呼叫,不必存在於 document 中)

【update】

所在元件的 vnode 更新時呼叫,但是可能發生在其孩子的 vnode 更新之前。指令的值可能發生了改變也可能沒有。但是可以通過比較更新前後的值來忽略不必要的模板更新

【componentupdated】

所在元件的 vnode及其孩子的 vnode全部更新時呼叫

【unbind】

只呼叫一次, 指令與元素解綁時呼叫

鉤子函式被賦予了以下引數

【el】

指令所繫結的元素,可以用來直接操作 dom

【binding】

乙個物件,包含以下屬性:

name: 指令名,不包括 v- 字首。

value: 指令的繫結值, 例如: v-my-directive="1 + 1", value 的值是 2。

oldvalue: 指令繫結的前乙個值,僅在 update 和 componentupdated 鉤子中可用。無論值是否改變都可用。

expression: 繫結值的字串形式。 例如 v-my-directive="1 + 1" , expression 的值是 "1 + 1"。

arg: 傳給指令的引數。例如 v-my-directive:foo, arg 的值是 "foo"。

modifiers: 乙個包含修飾符的物件。 例如: v-my-directive.foo.bar, 修飾符物件 modifiers 的值是 。

【vnode】

vue 編譯生成的虛擬節點

【oldvnode】

上乙個虛擬節點,僅在updatecomponentupdated鉤子中可用

[注意]除了el之外,其它引數都是唯讀的,盡量不要修改他們。如果需要在鉤子之間共享資料,建議通過元素的 dataset 來進行

下面是乙個使用了這些引數的自定義鉤子樣例

【函式簡寫】

大多數情況下,可能想在bindupdate鉤子上做重複動作,並且不想關心其它的鉤子函式。可以這樣寫:

vue.directive('color-swatch', function (el, binding) )
【物件字面量】

如果指令需要多個值,可以傳入乙個js物件字面量。指令函式能夠接受所有合法型別的js表示式

<

div

v-demo

="">

div>

vue.directive('demo', function (el, binding) )

Vue自定義指令

vue有很多內建的指令,比如說v on,v model,v clock等等,每乙個指令會完成一定的功能,但是這些內建的指令總會有些侷限性,要是能夠自定義指令就好了 vue的自定義指令分類 全域性指令和區域性指令 vue指令的定義和用法 以全域性指令為例 1.語法 vue.directive 指令id...

vue自定義指令

自定義指令主要有兩種方式。一是在元件裡以directives的選項來自定義指令的內容。這樣的自定義指令是區域性的自定義指令,只在當前的元件裡面才能使用。script export default directives arr arr.join el.style.csstext arr script ...

VUE 自定義指令

dom插入便獲取焦點 vue.directive focus 根據指令的值決定自否獲取焦點 vue.directive focus 注 被拖拽的元素必須有定位樣式 vue.directive drag function el,binding document.nm useup function 拓展...