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