Vue父子组件执行顺序问题

场景:父组件的created中有个axios请求,请求返回后将结果放到query中,希望等axios返回并写入query再执行子组件mounted中的内容,但是总是先执行子组件的mounted,之后父组件axios才返回结果

(父组件axios的返回可能为空,所以不能在子组件中query的内容是否为空,而且子组件直接加watch的话刷新当前页会有问题)

尝试过了在子组件的mounted方法中加setTimeout,也不行

相关代码

父组件

created() {
    testPost().then(res => {
      if (res.data.length > 0) {
        this.numList = res.data.map(item => item)
        this.num = this.numList[0]
        this.$router.push({
          query: {
            cid: this.num
          }
        })
      }
    }).catch(err => {
      console.log(err)
    })
  }

子组件

mounted() {
    if (this.$route.query.cid) {
      //todo
    }else{
        //todo
    }
  }
阅读 3.8k
3 个回答

把子组件写在mounted中的方法抽离出来写在methods里面,父组件拿到回调后主动去触发子组件的方法

1.在子组件上加个v-if等拿到query之后再渲染
2.子组件watch query

既然是父子组件数据的传递是否可以直接采用prop来传递,
子组件 监听prop属性的变化, 然后执行 你需要执行的函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题