怎么做網(wǎng)站設(shè)計推廣引流渠道
1——beforeCreate:在內(nèi)存中創(chuàng)建出vue實例,數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置還沒調(diào)用(data 和 methods 屬性還沒初始化)
【執(zhí)行數(shù)據(jù)觀測 (data observer) 和 event/watcher 事件配置】
2——created:實例已完成數(shù)據(jù)觀測 (data observer),property 和方法的運算,watch/event 事件回調(diào)。(data 和 methods屬性完成初始化,還沒開始編譯模板,可以進行Ajax請求)
【在內(nèi)存中編譯模板】
3——beforeMount(服務(wù)器端渲染期間不被調(diào)用):模板編譯完成,還沒有掛載到頁面中,相關(guān)的 render
函數(shù)首次被調(diào)用
【掛載模板到頁面】
4——mounted(服務(wù)器端渲染期間不被調(diào)用):模板已掛載到頁面中,真實的DOM渲染完成?!?可以操作DOM了!
這時 el
被新創(chuàng)建的 vm.$el
替換了。如果根實例掛載到了一個文檔內(nèi)的元素上,當 mounted
被調(diào)用時 vm.$el
也在文檔內(nèi)。
mounted
不保證所有的子組件也都一起被掛載,所以如果希望等到整個視圖都渲染完畢,需在 mounted
內(nèi)部使用 vm.$nextTick
至此,實例結(jié)束創(chuàng)建期,進入運行期,等待數(shù)據(jù)發(fā)生變化。
【數(shù)據(jù)變化】—— 數(shù)據(jù)變化時,會觸發(fā)beforeUpdate和updated,但一般用watch
5——beforeUpdate:狀態(tài)更新之前執(zhí)行此函數(shù),此時data中的狀態(tài)值是最新的,但是界面上顯示的數(shù)據(jù)還是舊的,因為此時還沒有開始重新渲染DOM節(jié)點
【更新頁面】
6——updated:實例更新完畢后調(diào)用此函數(shù),此時 data 中的狀態(tài)值 和 界面上顯示的數(shù)據(jù),都已經(jīng)完成了更新,界面已經(jīng)被重新渲染好了。
可用于子組件向父組件傳遞數(shù)據(jù)的變化
updated(){this.$emit('contentChange',this.content)
},
7——beforeDestroy:實例銷毀之前調(diào)用。在這一步,實例仍然完全可用?!?常在這里清除定時器和事件綁定
【銷毀實例】
8——destroyed:Vue 實例銷毀后調(diào)用。此時,Vue實例綁定的所有東西都會解綁,所有的事件監(jiān)聽器會被移除,所有的子實例也會被銷毀
父子組件的生命周期順序
- 父組件 created
- 子組件 created (外到內(nèi))
- 子組件 mounted
- 父組件 mounted (內(nèi)到外)
- 子組件 updated
- 父組件 updated (內(nèi)到外)
- 子組件 destroyed
- 父組件 destroyed (內(nèi)到外)
范例代碼
src\views\index.vue
<template><div><Child :num="num" /><button @click="add_num">+1</button></div>
</template><script>
import Child from "./child.vue";export default {components: {Child,},data() {return {num: 0,};},methods: {add_num() {this.num += 1;},},created() {console.log("父組件 created");},mounted() {console.log("父組件 mounted");},updated() {console.log("父組件 updated");},destroyed() {console.log("父組件 destroyed");},
};
</script>
src\views\menu\child.vue
<template><div>{{ num }}</div>
</template><script>
export default {props: {num: Number,},created() {console.log("子組件 created");},mounted() {console.log("子組件 mounted");},updated() {console.log("子組件 updated");},destroyed() {console.log("子組件 destroyed");},
};
</script>