鉤子函式引數
感謝閱讀
tips: 如果你已了解自定義指令的基本使用,想知道它到底能做什麼,請直接看案例。如果你還不清楚自定義指令是什麼,可以翻到部落格後面看一些簡介
我們來模仿v-on實現乙個簡易的v-on,我們叫他v-coder,執行前請先引入vue2.x
>
"myclick"
>
}<
/div>
<
/div>
// 先是在全域性定義乙個指令 v-coder
vue.
directive
('coder'
,(el, binding)
=>
// 我們通過expression知道使用者想要執行哪乙個方法,於是我們呼叫這個方法
// 我們需要通過vnode.context來獲取使用此指令的上下文,也就是vue例項物件
vnode.context[binding.expression]()
}}})
// 乙個勉強能用的自定義指令就這麼建立完成了
newvue(,
methods:,}
,})<
/script>
我們來實現乙個v-model,我們還是叫他v-coder,為什麼還叫v-coder…沒有為什麼!
// 實際上我們可以只用到bind&update階段,所以我們可以簡化以下**
>
"text" v-coder=
"iptval"
/>
"changeiptval"
>iptval減一<
/button>
iptval:
}<
/div>
<
/div>
vue.
directive
('coder'
,(el, binding, vnode)
=>
// 實現元素修改後對資料的修改 vnode.context記錄當前的上下文,也就是例項物件
el.addeventlistener
(binding.eve,
function()
)// 實現資料改變後檢視的改變
el.value = binding.value
})newvue(,
methods:,}
,})<
/script>
// 註冊乙個全域性自定義指令 `v-color`
vue.
directive
('color',}
)
在元件內自定義指令
components:
,inserted
(el, binding, vnode)
,update
(el, binding, vnode),}
,},}
,},
如果不需要使用鉤子函式,可以簡化為以下,則會在bind&update階段幫你準備好指令
我們一般都是在bind和update裡來做一些必要操作,所以簡寫形式很常用
vue.
directive
('color'
,function
(el, binding)
)
只呼叫一次,指令第一次繫結到元素時呼叫。在這裡可以進行一次性的初始化設定。
被繫結元素插入父節點時呼叫 (僅保證父節點存在,但不一定已被插入文件中),也就是當父節點被渲染成功後就會觸發。
所在元件的 vnode 更新時呼叫,但是可能發生在其子 vnode 更新之前。指令的值可能發生了改變,也可能沒有。可以理解為當父節點發生變化時會觸發的鉤子。
指令所在元件的 vnode及其子 vnode全部更新後呼叫。可以理解為當父節點及其本身都發生變化時會觸發的鉤子。
只呼叫一次,指令與元素解綁時呼叫。
指令所繫結的元素,可以用來直接操作dom。
物件中有以下屬性,記錄著我們需要的一些資料。
name指令名不包括v-字首 例:v-color, name儲存的就是color
value指令繫結的值 例:v-color=「1+1」 ,value儲存的就是2
oldvalue指令繫結的前乙個值 ,也就是當指令繫結的值被改變後,oldvalue會保留上乙個存在的值
expression指令繫結的表示式 例:v-color=「1+1」 ,value儲存的就是1+1
arg傳給指令的引數,例 v-color:foo=「foolish」,arg儲存的就是foo
modifiers: 包含修飾符的物件,例 v-color:foo.big.circle=「foolish」 modifiers保留的就是
vue編譯生成的虛擬節點。記錄著與dom元素相關的屬性,我們後面的案例會用到vnode.context,這個屬性記錄著當前使用指令的上下文,也就是vue的例項物件
上乙個虛擬節點,僅在update和componentupdated鉤子中可用。
這裡我們只討論binding這個物件,我們只講究實用性,關於vnode和oldvnode,有機會我們再**。
Vue 通過自定義指令回顧 v 內建指令
vue.js 的各種指令 directives 更加方便我們去資料驅動 dom,例如 v bind v on v model v if v for v once 等內建指令,這些指令的職責就是當表示式改變時將某些行為應用到 dom 上,盡量不去操作增刪改 dom。通過了解如何去自定義指令,可以想象內...
vue自定義指令實現v model
指令是vue中非常重要的內容,了解指令的用法可以更好的服務於業務場景,方便高效,本文主要介紹指令的基本概念和用法,簡單模擬v model實現的功能。除了內建指令,vue.js 也允許註冊自定義指令。自定義指令提供一種機制將資料的變化對映為 dom 行為。可以用vue.directive id,def...
Vue自定義指令
vue有很多內建的指令,比如說v on,v model,v clock等等,每乙個指令會完成一定的功能,但是這些內建的指令總會有些侷限性,要是能夠自定義指令就好了 vue的自定義指令分類 全域性指令和區域性指令 vue指令的定義和用法 以全域性指令為例 1.語法 vue.directive 指令id...