除了預設設定的核心指令(v-model
和v-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- 字首。【vnode】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 的值是 。
vue 編譯生成的虛擬節點
【oldvnode】
上乙個虛擬節點,僅在
update
和componentupdated
鉤子中可用[注意]除了
el
之外,其它引數都是唯讀的,盡量不要修改他們。如果需要在鉤子之間共享資料,建議通過元素的 dataset 來進行下面是乙個使用了這些引數的自定義鉤子樣例
【函式簡寫】
大多數情況下,可能想在
bind
和update
鉤子上做重複動作,並且不想關心其它的鉤子函式。可以這樣寫: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 拓展...