# 生命週期
注意
App.vue
本身是所有程序的進入點,而且並沒有符合整個根目錄的任何組件或是執行方法。
所以,App.vue
自身是沒有辦法使用 Router 的 Hooks 方法的。
# 路由流程
父組件 ➡️ 父組件 (Hello
➡️ Kitty
)
Hello beforeRouteLeave
Kitty beforeEnter
Kitty beforeRouteEnter
App beforeUpdate
Kitty beforeCreate
Kitty created
Kitty beforeMount
Hello beforeDestroy
Hello destroyed
Kitty mounted
App updated
2
3
4
5
6
7
8
9
10
11
Hello.vue
的 beforeDestory
與 destroyed
是會發生於 Kitty.vue
的 created
,beforeMount
之後 ,且在 mounted
之前。
父組件 ➡️ 子組件 (Hello
➡️ HelloKitty
)
Hello beforeRouteUpdate # 因為組件重複而觸發
HelloKitty beforeEnter
HelloKitty beforeRouteEnter
App beforeUpdate
Hello beforeUpdate
HelloKitty beforeCreate
HelloKitty created
HelloKitty beforeMount
HelloKitty mounted
Hello updated
App updated
2
3
4
5
6
7
8
9
10
11
父組件 ➡️ 其他父組件的子組件 (Kitty
➡️ HelloKitty
)
Kitty beforeRouteLeave
Hello beforeEnter
HelloKitty beforeEnter
Hello beforeRouteEnter
HelloKitty beforeRouteEnter
App beforeUpdate
Hello beforeCreate
Hello created
Hello beforeMount
HelloKitty beforeCreate
HelloKitty created
HelloKitty beforeMount
Kitty beforeDestroy
Kitty destroyed
HelloKitty mounted # 注意:子組件會先 mounted,再來是父組件
Hello mounted
App updated
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
相同父組件的子組件 ➡️ 同層子組件 (HelloKitty
➡️ HelloWorld
)
HelloKitty beforeRouteLeave
Hello beforeRouteUpdate
HelloWorld beforeEnter
HelloWorld beforeRouteEnter
App beforeUpdate
Hello beforeUpdate
HelloWorld beforeCreate
HelloWorld created
HelloWorld beforeMount
HelloKitty beforeDestroy
HelloKitty destroyed
HelloWorld mounted
Hello updated
App updated
2
3
4
5
6
7
8
9
10
11
12
13
14
比起從其他路徑進來的過程,如果都是在 同一個 父層級路由當中變換,那麼 Hello.vue
的 mounted
就不會再被觸發,且 Hello.vue
的 beforeRouteUpdate
會在每個子路由離開 (beforeRouteLeave
) 後,銷毀之前執行。
# 路由順序
beforeCreate
,created
,beforeMount
順序 父組件 > 子組件。舉例:一父組件進入另一父組件的子組件,會先執行另一父組件的
beforeCreate
,created
,beforeMount
才是子組件的。mounted
順序 子組件 > 父組件。同父組件,以下事件只會做 1 次:
beforeEnter
beforeRouteEnter
beforeCreate
created
beforeMount
mounted
子組件在完全離開時才會執行
beforeRouteLeave
。在路由當中「重新整理頁面」的順序不太一樣,以
/hello/kitty
列舉如下:先執行父組件
Hello.vue
的beforeEnter
。接著子組件
HelloKitty.vue
的beforeEnter
。然後才是
App.vue
的系列動作:beforeCreate
created
beforeMount
mounted
接著是
Hello.vue
的beforeRouteEnter
接著子組件
HelloKitty.vue
的beforeRouteEnter
全局的
beforeResolve
再來是
App.vue
的beforeUpdate
後續是
Hello.vue
、HelloKitty.vue
與其他組件系列動作 (父組件 > 子組件)beforeCreated
created
beforeMount
最後在依照路由順序
mounted
,內部組件理論上會優先 (子組件 > 父組件)最後的最後
App.vue
的updated