今天做项目的时候,踩了一个坑,如下图所示,我在A组件中声明了一个监听函数,用来接收B组件传递过来的数据:
![](https://i-blog.csdnimg.cn/blog_migrate/fbca838fc18f32d462ded3e3a8784e79.png)
在B组件中,我将传递数据单独写成一个函数(sendParamObj),然后再在另一个函数中去调用这个函数
![](https://i-blog.csdnimg.cn/blog_migrate/63be4cc0bb40feb5834effc4ec1e7a35.png)
![](https://i-blog.csdnimg.cn/blog_migrate/44ac59a38cd56844c09671c5f9cce4af.png)
结果发现A组件始终无法接收到B组件传递过来的数据。思考了好久才知道,全局事件总线必须要先监听数据,再进行数据的传递(即先执行$on,再执行$emit),如果在数据监听之前就进行数据的传递,会导致监听不到数据的情况出现,所以这里将上述的函数进行改进,添加nextTick方法,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/85c51e6b50d10dd78a8513c5fd96a4b2.png)
这样就保证了先执行先监听数据,再传递数据!