vue路由跳转的三种方式及区别(Vue路由跳转组件生命周期变化)
vue路由跳转的三种方式及区别(Vue路由跳转组件生命周期变化)红色框部分是点击导航之后新增加的,注意黄色框和其他的差异。可以总结几条:接着点击导航进入about 控制台完整显示:<App> <Home> <HelloWorld> <About>home组件有子组件HelloWorld 有兄弟组件About。首先页面加载,控制台显示:子组件的生命周期在父组件mounted之前完成。
结合前面一篇《Vue中父子组件的生命周期》 这篇总结一下页面组件切换适合的生命周期变化。
创建另外一个子组件
About.vue
<template>
  <div class="about">
    <h1>This is an about page</h1>
  </div>
</template>
<script>
export default {
  name: "About" 
  beforeCreate() {
    console.log("About beforeCreate"  this.$data  this.$el);
  } 
  created() {
    console.log("About created"  this.$data  this.$el);
  } 
  beforeMount() {
    console.log("About beforeMount"  this.$data  this.$el);
  } 
  mounted() {
    console.log("About mounted"  this.$data  this.$el);
  } 
  beforeUpdate() {
    console.log("About beforeUpdate"  this.$data  this.$el);
  } 
  updated() {
    console.log("About updated"  this.$data  this.$el);
  } 
  beforeUnmount() {
    console.log("About beforeUnmount"  this.$data  this.$el);
  } 
  unmounted() {
    console.log("About unmounted"  this.$data  this.$el);
  } 
};
</script>
    
这个时候的组件结构是
<App>
    <Home>
         <HelloWorld>
    <About>
    
home组件有子组件HelloWorld 有兄弟组件About。
首先页面加载,控制台显示:

子组件的生命周期在父组件mounted之前完成。
接着点击导航进入about 控制台完整显示:

红色框部分是点击导航之后新增加的,注意黄色框和其他的差异。可以总结几条:
- 因为是从home导航至about,所以肯定是home先挥手告别(beforeUnmount) 但是还没有真的离开,所以没有继续(unmounted)
 - 由于Home包含子组件,所以子组件也跟随挥手告别(beforeUnmount)
 - 既然是挥手告别home组件,那么去向About组件应该是需要准备好,于是就有了about相应的生命周期(beforeCreate created beforeUnmount)
 - 这时About组件不能马上(mounted),因为前面还只是挥手告别而已(beforeUnmount)
 - 接着才是从Home和它子组件的离开(unmounted),这里父子组件的卸载也有逻辑顺序,一定是子组件都卸载了,才轮到父组件卸载
 - 最后是目的组件的挂载完成(mounted)
 
当然,也可以从另外角度解释,当从一个组件跳到另外一个组件的时候,前一个组件要进入到先准备卸载(beforeUnmount),接着后一个组件从创建到进入到准备挂载(beforeCreated->beforeMount) 最后,前一个组件正式卸载(unmounted),后一个组件正式挂载(mounted).
如果遇到前一个组件包含有子组件,那么准备卸载一定是父组件先带头,正式卸载则是子组件先执行。




