Vue提供了一種稱為“生命周期鉤子”的特性,這些鉤子允許開發(fā)者登記自定義行為,當Vue實例在某些特殊的狀態(tài)下執(zhí)行時自動執(zhí)行這些行為。其中,有一個鉤子函數(shù)被稱為“beforeCreated”,它在Vue實例被創(chuàng)建前被調(diào)用。
new Vue({
beforeCreated: function () {
// 在實例初始化之后,數(shù)據(jù)觀測和 event/watcher
// 設置之前立即被調(diào)用,這里沒有$el,$data等實例屬性。
}
})
雖然在實例被創(chuàng)建前,我們還無法獲取到實例的任何屬性,但開發(fā)者可以利用“beforeCreated”鉤子函數(shù)執(zhí)行一些必要的操作,例如:
- 手動處理一些需要在實例創(chuàng)建前完成的業(yè)務邏輯。
- 注冊 Vue插件、指令、過濾器等。
- 掛載Ajax攔截器、統(tǒng)一錯誤處理等基礎設施。
此外,開發(fā)者可以在“beforeCreated”鉤子前執(zhí)行其他JavaScript代碼,但Vue可能仍然沒有完全加載并解析。這意味著如果我們想使用Vue提供的組件,指令等等,最好將它們放到“created”鉤子函數(shù)之后。
new Vue({
beforeCreated: function () {
// 我們對 Vue進行了一系列基礎設施的初始化操作。
// 此時 Vue組件還沒準備好,此處使用 Vue組件會失敗。
this.$http.interceptors.request.use(function (config) {
// 在發(fā)起請求之前我們需要注入一些安全頭部
var token = window.sessionStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
})
},
created: function () {
// 此處我們進行 Vue組件的初始化等業(yè)務。此時 Vue組件準備好了,我們可以愉快的使用 Vue組件。
this.$mount('#app')
}
})
雖然“beforeCreated”鉤子函數(shù)在Vue的生命周期中位于較早的位置,但僅僅執(zhí)行一次。在鉤子被調(diào)用完畢后,Vue會繼續(xù)初始化實例的剩余部分,直到實例準備就緒并開始運行。
總結(jié)一下,“beforeCreated”鉤子函數(shù)可以幫助開發(fā)者在Vue實例創(chuàng)建之前執(zhí)行一些必要的操作,如初始化基礎設施、注冊Vue插件、指令和過濾器等。然而,要注意的是“beforeCreated”鉤子函數(shù)僅僅執(zhí)行一次,且Vue可能仍未完全加載和解析。開發(fā)者可以在鉤子函數(shù)前執(zhí)行其他JavaScript代碼,但最好將Vue組件放到“created”鉤子函數(shù)之后。