parent 和 child vue 之间的异步生命周期

Asynchronous lifecycle between parent and child vue

虽然我被路由到 'myFavouritePage',但是“嗨,我是 child”在路由到 'myFavouritePage' 之后会被打印出来。 parent 中是否有函数完成后创建 child 组件? Parent:

beforeCreate () {
    var orderNumber = this.$store.state.myStore.order.number
    if (!orderNumber) {
        this.$router.push({name: 'myFavouritePage'})
    }
}

Child:

mounted () {
    cosole.log('Hi, I'm child')
}

您可以在您的组件中使用组件守卫,并将 vuex 存储导入同一文件。

import store from 'pathto/your/store'

beforeRouteEnter(to, from, next) {
 if (!store.state.myStore.order.number) return next({name: 'myFavouritePage'})
 next();
}

为了阐明什么是不同生命周期事件的 order,以下是它们发生的顺序:

  • beforeCreate() and created() of the parent 运行 first.
  • 正在呈现 parent 的模板,这意味着 child 组件已创建
  • 现在 children 的 beforeCreate() 和 created() 挂钩分别执行。
  • 这些 child 组件挂载到 DOM 元素,调用它们的 beforeMount() 和 mounted() 钩子
  • 只有这样,parent的模板完成后,parent才能挂载到DOM,所以最后是parent的beforeMount () 和 mounted() 钩子被调用。

然而,根据我和@Srinival 的建议,您可以使用 beforeRouteEnter 来决定是继续渲染还是重定向到其他路线。