生命周期
beforeCreate
在實例初始化之后僵蛛,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置之前被調(diào)用。
created
在實例創(chuàng)建完成后被立即調(diào)用迎变。在這一步充尉,實例已完成以下的配置:數(shù)據(jù)觀測 (data observer),屬性和方法的運算衣形,watch/event 事件回調(diào)驼侠。然而,掛載階段還沒開始谆吴,$el 屬性目前不可見倒源。
beforemount
在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用。
mounted
el 被新創(chuàng)建的 vm.$el 替換句狼,并掛載到實例上去之后調(diào)用該鉤子笋熬。如果 root 實例掛載了一個文檔內(nèi)元素,當(dāng) mounted 被調(diào)用時 vm.$el 也在文檔內(nèi)腻菇。
beforeUpdate
數(shù)據(jù)更新時調(diào)用胳螟,發(fā)生在虛擬 DOM 打補(bǔ)丁之前。這里適合在更新之前訪問現(xiàn)有的 DOM筹吐,比如手動移除已添加的事件監(jiān)聽器旺隙。
updated
當(dāng)這個鉤子被調(diào)用時,組件 DOM 已經(jīng)更新骏令,所以你現(xiàn)在可以執(zhí)行依賴于 DOM 的操作蔬捷。然而在大多數(shù)情況下,你應(yīng)該避免在此期間更改狀態(tài)榔袋。如果要相應(yīng)狀態(tài)改變周拐,通常最好使用計算屬性或 watcher 取而代之。
beforeDestroy
實例銷毀之前調(diào)用凰兑。在這一步妥粟,實例仍然完全可用。
destroyed
Vue 實例銷毀后調(diào)用吏够。調(diào)用后勾给,Vue 實例指示的所有東西都會解綁定滩报,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀播急。
自定義指令
當(dāng)頁面加載時脓钾,該元素將獲得焦點 (注意:autofocus 在移動版 Safari 上不工作)。事實上桩警,只要你在打開這個頁面后還沒點擊過任何內(nèi)容可训,這個輸入框就應(yīng)當(dāng)還是處于聚焦?fàn)顟B(tài)。現(xiàn)在讓我們用指令來實現(xiàn)這個功能:
// 注冊一個全局自定義指令 `v-focus`
Vue.directive('focus', {
// 當(dāng)被綁定的元素插入到 DOM 中時……
inserted: function (el) {
// 聚焦元素
el.focus()
}
})
在組件中使用:
directives: {
focus: {
// 指令的定義
inserted: function (el) {
el.focus()
}
}
}
后你可以在模板中任何元素上使用新的 v-focus 屬性
<input v-focus>
鉤子函數(shù)
一個指令定義對象可以提供如下幾個鉤子函數(shù) (均為可選):
bind:只調(diào)用一次捶枢,指令第一次綁定到元素時調(diào)用握截。在這里可以進(jìn)行一次性的初始化設(shè)置。
inserted:被綁定元素插入父節(jié)點時調(diào)用 (僅保證父節(jié)點存在烂叔,但不一定已被插入文檔中)谨胞。
componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調(diào)用。
指令鉤子函數(shù)的參數(shù)有這些:
el:指令所綁定的元素蒜鸡,可以用來直接操作 DOM 胯努。
binding:一個對象,包含以下屬性:
name:指令名术瓮,不包括 v- 前綴。
value:指令的綁定值贰健,例如:v-my-directive="1 + 1" 中胞四,綁定值為 2。
oldValue:指令綁定的前一個值伶椿,僅在 update 和 componentUpdated 鉤子中可用辜伟。無論值是否改變都可用。