Vue的生命周期一起來(lái)看看
1. 生命周期(重要)
1.1 初步認(rèn)識(shí)生命周期
- 別名:生命周期回調(diào)函數(shù)、生命周期函數(shù)、生命周期鉤子。
- 生命周期是什么?Vue在關(guān)鍵時(shí)刻幫我們調(diào)用的一些特殊名稱(chēng)的函數(shù)。
- 生命周期函數(shù)的名字不可更改,但函數(shù)內(nèi)部的具體內(nèi)容由程序員自行編寫(xiě)
- 生命周期函數(shù)中的this指向也是vm 或 組件實(shí)例對(duì)象。
1.2 生命周期流程(8個(gè))
1.初始化
? 1.beforeCreate()
? 2.created()
2.掛載(頁(yè)面渲染)
? 1.beforeMount()
? 2.mounted()
3.更新
? 1.beforeUpdate()
? 2.updated()
4.銷(xiāo)毀
? 1.beforeDestory()
? 2.destoryed()
1.3 生命周期詳細(xì)流程圖

1.4 常用的生命周期鉤子:
beforeCreate():可以配置全局事件總線,后面會(huì)講到先提一嘴
mounted(): 可以在此階段發(fā)送ajax請(qǐng)求, 啟動(dòng)定時(shí)器、綁定自定義事件、訂閱消息等異步任務(wù)【初始化操作】
beforeDestroy(): 在此階段做收尾工作, 如: 清除定時(shí)器、解綁自定義事件、取消訂閱消息等【首尾工作】
1.4.1 關(guān)于銷(xiāo)毀
- 銷(xiāo)毀后借助Vue開(kāi)發(fā)者工具看不到任何信息
- 銷(xiāo)毀后自定義事件會(huì)失效,但原生DOM事件依然有效
- 一般不會(huì)在
beforeDestroy操作數(shù)據(jù),因?yàn)榧词共僮鲾?shù)據(jù),也不會(huì)再觸發(fā)更新流程了。
1.4.2 關(guān)于父子組件的生命周期
1.加載渲染的過(guò)程
父beforeCreate ==> 父created ==> 父beforeMount ==> 子beforeCreate ==> 子created ==> 子beforeMount ==> 子mounted ==> 父mounted
2.更新的過(guò)程
父beforeUpdate ==> 子beforeUpdate ==> 子updated ==> 父updated
3.銷(xiāo)毀過(guò)程
父beforeDestroy ==> 子beforeDestroy ==> 子destroyed ==> 父destroyed
1.5小案例
<div id="root">
<!-- 讓h3透明度產(chǎn)生過(guò)渡的效果 -->
<h3 :style="{opacity:opacity}">歡迎學(xué)習(xí)Vue!</h3>
<button @click="des">點(diǎn)擊我銷(xiāo)毀</button>
</div>
<script>
Vue.config.productionTip = false
let vm = new Vue({
el: '#root',
data: {
opacity: 1
},
methods: {
des(){
// 觸發(fā)此函數(shù)必定調(diào)用,beforeDestroy(),destroyed()
this.$destroy()
}
},
mounted() { //掛載
/*
- 完成模板解析后并且將初始的真實(shí)的DOM元素掛載到頁(yè)面后,才執(zhí)行的函數(shù)
只會(huì)執(zhí)行一次
- this指向Vue
- 開(kāi)發(fā)中常用的方法,當(dāng)我們想要讀取某個(gè)屬性但是讀不到,就可以
將該屬性綁定到共同能夠訪問(wèn)到的元素上,例如下面定時(shí)器的例子
*/
this.timer = setInterval(() => {
this.opacity -= 0.01
if (this.opacity <= 0)
this.opacity = 1
}, 10);
},
beforeDestroy() {
console.log("beforeDestroy - 清除定時(shí)器");
clearInterval(this.timer)
},
destroyed() {
console.log("destroyed - 銷(xiāo)毀完畢")
},
})
</script>
1.6 代碼舉例說(shuō)明生命周期鉤子
<div id="root">
<h3>n的值為:{{n}}</h3>
<button @click="add">點(diǎn)擊我n+1</button>
<button @click="remove">點(diǎn)擊銷(xiāo)毀vm</button>
</div>
<script>
Vue.config.productionTip = false
let vm = new Vue({
el: '#root',
data: {
n:1
},
methods: {
add(){
this.n++
},
remove(){
this.$destroy()
}
},
beforeCreate() {
/*
此時(shí)初始化生命周期,事件等,數(shù)據(jù)代理還未開(kāi)始
vm無(wú)法訪問(wèn)到data中的數(shù)據(jù),methods中的方法
*/
console.log("beforeCreate");
//console.log(this.n); //undefined
// console.log(this.add()); // this.add is not a function
// debugger
},
created() {
/*
已經(jīng)完成了初始化的數(shù)據(jù)監(jiān)視和數(shù)據(jù)代理
vm可以訪問(wèn)到data中的數(shù)據(jù)和methods的方法
*/
console.log("created");
// console.log(this.n); // 1
// console.log(this.add()); // undefined
// debugger
},
beforeMount() {
/*
掛載之前,也就是圖中的判斷框里執(zhí)行的,此階段是Vue
在解析模板并且生成虛擬DOM存儲(chǔ)在內(nèi)存當(dāng)中,頁(yè)面還不能
看到解析后的樣子
*/
console.log("beforeMount");
// debugger
},
mounted() {
/*
完成模板解析后并且將初始的真實(shí)的DOM元素掛載到頁(yè)面后,才執(zhí)行的函數(shù)
一般在此:開(kāi)啟一些定時(shí)器、發(fā)送網(wǎng)絡(luò)請(qǐng)求、訂閱消息、
綁定自定義事件等等初始化
*/
console.log("mounted");
// debugger
},
beforeUpdate() {
/*
當(dāng)數(shù)據(jù)發(fā)生更新后,此時(shí)數(shù)據(jù)已經(jīng)更新完成,但是頁(yè)面
還是未更新的。
也就是面試所問(wèn)的:頁(yè)面和尚未和數(shù)據(jù)保持同步的階段
*/
console.log("beforeUpdate");
},
updated() {
/*
在這之前會(huì)進(jìn)行新舊虛擬DOM比較,最終完成頁(yè)面的更新
此階段就是頁(yè)面和數(shù)據(jù)保持同步
*/
console.log("updated");
},
beforeDestroy() {
/*
當(dāng)我們調(diào)用vm.$destroy時(shí),才會(huì)執(zhí)行下面兩個(gè)函數(shù),
馬上要執(zhí)行銷(xiāo)毀階段,一般在這個(gè)階段做一些收尾操作
比如:關(guān)掉定時(shí)器,取消訂閱,解綁自定義事件
*/
console.log("beforeDestroy");
},
destroyed() {
/*
所有的指令,所有的自定義事件監(jiān)聽(tīng)器都沒(méi)了(只留下原生的dom的事件)
*/
console.log("destroyed");
},
})
</script>
總結(jié)
以上就是今天要講的內(nèi)容,本文介紹了生命周期的相關(guān)知識(shí),希望對(duì)大家有所幫助!
相關(guān)文章
vue通過(guò)style或者class改變樣式的實(shí)例代碼
這篇文章主要介紹了vue通過(guò)style或者class改變樣式的實(shí)例代碼,在文中給大家提到了vue的一些樣式(class/style)綁定,需要的朋友可以參考下2018-10-10
Vue+NodeJS實(shí)現(xiàn)大文件上傳的示例代碼
常見(jiàn)的文件上傳方式可能就是new一個(gè)FormData,把文件append進(jìn)去以后post給后端就可以了。但如果采用這種方式來(lái)上傳大文件就很容易產(chǎn)生上傳超時(shí)的問(wèn)題。所以本文將利用Vue+NodeJS實(shí)現(xiàn)大文件上傳,需要的可以參考一下2022-05-05
解決Vue+SpringBoot+Shiro跨域問(wèn)題
本文將結(jié)合實(shí)例代碼,解決Vue+SpringBoot+Shiro跨域問(wèn)題,相信大家剛開(kāi)始做都會(huì)遇到這個(gè)問(wèn)題,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
vue3.0中使用Element-Plus中Select下的filter-method屬性代碼示例
這篇文章主要給大家介紹了關(guān)于vue3.0中使用Element-Plus中Select下的filter-method屬性的相關(guān)資料,Filter-method用法是指從一組數(shù)據(jù)中選擇滿足條件的項(xiàng),文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
vue-router(this.$router)如何在新窗口打開(kāi)路由跳轉(zhuǎn)頁(yè)面
這篇文章主要介紹了vue-router(this.$router)如何在新窗口打開(kāi)路由跳轉(zhuǎn)頁(yè)面問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

