受全域性引入angularjs
的啟發,vue
內建了一些非常有用的指令,比如v-html
和v-once
等,每個指令都有自身的用途。除了系統內部的指令,vue
也允許註冊自定義指令。
建立乙個directive.js
,**如下,然後在main.js
中引入即可。
// 註冊乙個全域性自定義指令 `v-focus`
vue.directive('focus',
})
這裡有個函式簡寫形式,想在bind
和update
時觸發相同行為,而不關心其它的鉤子。可以這樣寫:
vue.directive('focus', function (el, binding) )
區域性引入
如果想註冊區域性指令,元件中也接受乙個directives
的選項:
directives:
}}
然後就可以在模板中任何元素上使用新的v-focus
屬性,如下:
自定義指令一共有5個鉤子函式:bind
、inserted
、update
、componentupdate
和unbind
。
鉤子函式會被傳入以下引數:el
、binding
、vnode
、oldvnode
。
以上內容詳細可以參考官網對鉤子函式的簡介——鉤子函式 。不過有點非常重要的就是除了el
之外,其它引數都應該是唯讀的,切勿進行修改。如果需要在鉤子之間共享資料,建議通過元素的dataset
來進行。
指令的使用方式主要是以下四種:
場景一: 限制輸入框輸入的最大長度(不包含空格)
指令名為limit
,指令的繫結值為可輸入最大長度。
//template
vue.directive('limit', function (el, binding, vnode) );
});
場景二:通過指令實現防抖
指令名為debounce
,傳給指令的引數為click
,click
作為引數傳入的目的在於可以配置事件,通過傳keydown
,mouseover
等也可以讓這個指令支援滑鼠或者鍵盤事件等等。而修飾符.stop
或者.prevent
可以配置事件冒泡和阻止預設事件等等。
//template
vue.directive('debounce', function (el, binding) , 300);
});});
以上是兩個簡單的例子,會發現用的最頻繁的是el
和binding
,el
表示元素本身,binding
比較複雜了,它有以下屬性:
binding.value
和binding.expression
可能會搞亂,binding.value
獲取的是具體的方法或者數值,而binding.expression
獲取的僅僅是方法名和值的表示式,舉個例子:
//template
vue.directive('test', function (el, binding) );
總的來說,指令是非常強大的,但是往往也很容易被開發者們所忽略,因為很多時候用工具類函式或者元件的方式也可以實現同樣的功能,不過學會指令的話肯定就是如虎添翼,作為乙個有要求的程式設計師,還是非常有必要掌握這個技能,分享個乾貨,這15個vue自定義指令,讓你的專案開發爽到爆。 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 拓展...