Vue組件和Route的生命周期實(shí)例詳解
先講點(diǎn)實(shí)際的
實(shí)用點(diǎn)的鉤子:
Created:vue實(shí)例被生成后的一個(gè)生命周期鉤子函數(shù)。(頁(yè)面初始化數(shù)據(jù)加載一般寫(xiě)這里);
beforeCreate:給個(gè)loading界面 created撤銷(xiāo)loading;
beforeDestory:你確認(rèn)刪除XX嗎?
destoryed:當(dāng)前組件已被刪除,清空相關(guān)內(nèi)容
關(guān)于Vue組件生命周期,翻譯后圖示:

module.exports = {
//props: ['父組建傳的值'],
data:function(){
lifecycle.push("data");
return {
msg: '各個(gè)階段,可以查看控制臺(tái)輸出,message from my-views',
title:'my_views',
lifecycle: lifecycle
}
},
//這里是route的生存周期
route:{
//waitForData: true, // 數(shù)據(jù)加載完畢后再切換試圖,也就是 點(diǎn)擊之后先沒(méi)反應(yīng),然后數(shù)據(jù)加載完,再出發(fā)過(guò)渡效果
canActivate:function(transition){
// canActivate階段,可以做一些用戶(hù)驗(yàn)證的事情(是否可以被激活)
// 在驗(yàn)證階段,當(dāng)一個(gè)組件將要被切入的時(shí)候被調(diào)用。
},
activate:function(transition){
// 在激活階段被調(diào)用,在 activate 被斷定( resolved ,指該函數(shù)返回的 promise 被 resolve )。用于加載和設(shè)置當(dāng)前組件的數(shù)據(jù)。(激活)
//this.$root.$set('header',this.title);
transition.next();
//此方法結(jié)束后,api會(huì)調(diào)用afterActivate 方法
//在aftefActivate中 會(huì)給組件添加 $loadingRouteData 屬性 并設(shè)置為true
},
data: function(transition) {
var _this = this;
// 在激活階段被調(diào)用,在 activate 被斷定( resolved ,指該函數(shù)返回的 promise 被 resolve )。用于加載和設(shè)置當(dāng)前組件的數(shù)據(jù)
// 說(shuō)明之前請(qǐng)求過(guò) 則不用再請(qǐng)求了
if(this.$root.myViewsData){
this.$data = this.$root.myViewsData;
transition.next();
console.log('已經(jīng)請(qǐng)求過(guò)了不再請(qǐng)求數(shù)據(jù)');
return;
}
//將數(shù)據(jù)同步到根節(jié)點(diǎn)
this.$root.myViewsData = this.$data;
setTimeout(function(){
//這里 _this.$loadingRouteData 是 true
transition.next({msg:'加載后的數(shù)據(jù)'});
//在調(diào)用完transition.next 后,_this.$loadingRouteData 為 false
}.bind(this),4000);
},
canDeactivate:function(transition){
// 在驗(yàn)證階段,當(dāng)一個(gè)組件將要被切出的時(shí)候被調(diào)用。(是否可以被禁用)
},
deactivate: function (transition) {
// 在激活階段,當(dāng)一個(gè)組件將要被禁用和移除之時(shí)被調(diào)用。(禁用)
}
},
beforeCreate:function(){
// 在實(shí)例初始化之后,數(shù)據(jù)觀測(cè)(data observer) 和 event/watcher 事件配置之前被調(diào)用。
},
created:function(){
// 實(shí)例已經(jīng)創(chuàng)建完成之后被調(diào)用。在這一步,實(shí)例已完成以下的配置:數(shù)據(jù)觀測(cè)(data observer),屬性和方法的運(yùn)算, watch/event 事件回調(diào)。然而,掛載階段還沒(méi)開(kāi)始,$el 屬性目前不可見(jiàn)。
},
beforeCreate:function(){
// 在實(shí)例初始化之后,數(shù)據(jù)觀測(cè)(data observer) 和 event/watcher 事件配置之前被調(diào)用。
},
mounted:function(){
// el 被新創(chuàng)建的 vm.$el 替換,并掛載到實(shí)例上去之后調(diào)用該鉤子。如果 root 實(shí)例掛載了一個(gè)文檔內(nèi)元素,當(dāng) mounted 被調(diào)用時(shí) vm.$el 也在文檔內(nèi)。
},
beforeUpdate: function(){
// 數(shù)據(jù)更新時(shí)調(diào)用,發(fā)生在虛擬 DOM 重新渲染和打補(bǔ)丁之前。
// 你可以在這個(gè)鉤子中進(jìn)一步地更改狀態(tài),這不會(huì)觸發(fā)附加的重渲染過(guò)程。
},
updated: function(){
// 由于數(shù)據(jù)更改導(dǎo)致的虛擬 DOM 重新渲染和打補(bǔ)丁,在這之后會(huì)調(diào)用該鉤子。
//當(dāng)這個(gè)鉤子被調(diào)用時(shí),組件 DOM 已經(jīng)更新,所以你現(xiàn)在可以執(zhí)行依賴(lài)于 DOM 的操作。然而在大多數(shù)情況下,你應(yīng)該避免在此期間更改狀態(tài),因?yàn)檫@可能會(huì)導(dǎo)致更新無(wú)限循環(huán)。
},
// <keep-alive> 包裹動(dòng)態(tài)組件時(shí),會(huì)緩存不活動(dòng)的組件實(shí)例,而不是銷(xiāo)毀它們。
activated: function(){
// keep-alive 組件激活時(shí)調(diào)用。
},
deactivated: function(){
// keep-alive 組件停用時(shí)調(diào)用。
},
beforeDestroy:function(){
// 實(shí)例銷(xiāo)毀之前調(diào)用。在這一步,實(shí)例仍然完全可用。
},
destroyed:function(){
// Vue 實(shí)例銷(xiāo)毀后調(diào)用。調(diào)用后,Vue 實(shí)例指示的所有東西都會(huì)解綁定,所有的事件監(jiān)聽(tīng)器會(huì)被移除,所有的子實(shí)例也會(huì)被銷(xiāo)毀。
}
}
總結(jié)
以上所述是小編給大家介紹的Vue組件和Route的生命周期詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
vuex結(jié)合session存儲(chǔ)數(shù)據(jù)解決頁(yè)面刷新數(shù)據(jù)丟失問(wèn)題
在項(xiàng)目中表單篩選項(xiàng)里,選擇完之后刷新頁(yè)面數(shù)據(jù)就變了,沒(méi)有保留在自己選擇的選項(xiàng)上。本文使用session存儲(chǔ)數(shù)據(jù),具有一定的參考價(jià)值,感興趣的可以了解一下2021-09-09
VUE實(shí)現(xiàn)一個(gè)Flappy Bird游戲的示例代碼
這篇文章主要介紹了VUE實(shí)現(xiàn)一個(gè)Flappy Bird的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
vue3+vite加載本地js/json文件不能使用require淺析
這篇文章主要給大家介紹了關(guān)于vue3+vite加載本地js/json文件不能使用require的相關(guān)資料,require 是屬于 Webpack 的方法,在v3+vite的項(xiàng)目里面并不適用,需要的朋友可以參考下2023-07-07
vue雙向綁定數(shù)據(jù)限制長(zhǎng)度的方法
這篇文章主要為大家詳細(xì)介紹了vue雙向綁定數(shù)據(jù)限制長(zhǎng)度的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
vue?禁止重復(fù)點(diǎn)擊發(fā)送多次請(qǐng)求的實(shí)現(xiàn)
本文主要介紹了vue?禁止重復(fù)點(diǎn)擊發(fā)送多次請(qǐng)求的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
關(guān)于vue中對(duì)window.openner的使用指南
opener屬性是一個(gè)可讀可寫(xiě)的屬性,可返回對(duì)創(chuàng)建該窗口的Window對(duì)象的引用,下面這篇文章主要給大家介紹了關(guān)于vue中對(duì)window.openner使用的相關(guān)資料,需要的朋友可以參考下2022-11-11
Vue中使用this.$set()如何新增數(shù)據(jù),更新視圖
這篇文章主要介紹了Vue中使用this.$set()實(shí)現(xiàn)新增數(shù)據(jù),更新視圖方式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

