如何让vue的响应式系统完成异步后执行某个操作?

当我在vue组件(A)里面点击提交按钮后会commit一个flag,来告诉组件B,你需要提交自己的数据到vuex,
然后A的提交方法继续向下执行,并发起请求。并且这个请求依赖B commit的数据,但是当A发起请求的时候B还没来得急commit自己的数据到vuex,这个怎么解决?
这个应该是因为vue的响应式系统是异步导致的吧。

阅读 3.4k
1 个回答

这个如果了解异步编程,其实就很容易了.
就是设置一个回调函数,在将来某件事情完成的时候执行这个函数.

就你的业务而言,多种方法可以实现.
A通知B这里,你可以用数据总线$bus来实现.
main.js里给Vue原型挂一个Vue实例,利用其事件监听的作用.

Vue.prototype.$bus = new Vue()

A需要B的数据的时候,通过总线去和B要一下过来就可以.
在B监听个事件,事件接受一个回调函数作为参数,事件触发的时候把数据交给回调函数去处理:
B.vue

created () {
  this.$bus.$on('send-data', this.sendData)
},

beforeDestory () {
  this.$bus.$off('send-data', this.sendData)
},

methods: {
  sendData (callback) {
    // 假设A需要的数据是this.data
    callback(this.data)
  }
}

A里面则是发送事件,并带个回调函数给B就可以.

methods: {
  getData () {
    let func = bData => {
      // bData即从B中得到的数据,现在就利用这个数据在此发送请求吧
    }
    this.$bus.$emit('send-data', func)
  }
}

这样就OK了,应该能解决你的问题~


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