vue2使用eventbus踩坑解决
前言
vue组件非常常见的有父子组件通信,兄弟组件通信。而父子组件通信就很简单,父组件会通过 props 向下传数据给子组件,当子组件有事情要告诉父组件时会通过 $emit 事件告诉父组件。
而两个毫不相关的界面通讯我们又可以用到vuex和今天要说的eventbus,本文就对eventbus使用时遇到的问题以及怎么处理做说明,至于怎么使用就不过多赘述了。
问题1:
页面A使用emit为什么第一次进入B的时候页面B中的on事件没有被触发
这就涉及到vue的生命周期问题了,如果A的emit方法写在了跳转方法里这时候B界面其实还没有创建,这时候通知是触发不了B的on事件。
至于怎么解决问题,其实看下面的图片大家就清楚了。
所以,我们可以把A页面组件中的emit事件写在beforeDestory中去。
因为这个时候,B页面组件已经被created了,也就是我们写的on事件已经触发了。
所以可以,在beforeDestory的时候,emit事件。
A界面
// 跳转界面的方法 editList (index, date, item) { // 点击进入编辑的页面,需要传递的参数比较多。 this.$router.replace({path: '/B'}) } // bus通知的方法 beforeDestroy () { bus.$emit('get', { name:'A'}) }
B界面
// bus通知的方法 create() { bus.$on('get', (data)=>{ }) }
这个问题就解决了
问题2:
为什么后面再一次依次去触发的时候会出现,每一次都会发现好像之前的on事件分发都没有被撤销一样,导致每一次的事件触发执行越来越多。
这就是因为bus的on事件是不会自动清楚销毁的,需要我们手动来销毁。
// 在B组件页面中添加以下语句,在组件beforeDestory的时候销毁。 beforeDestroy () { bus.$off('get', ()=>{}) }
以上就是vue2使用eventbus踩坑解决的详细内容,更多关于vue2 eventbus踩坑的资料请关注脚本之家其它相关文章!
相关文章
vue报错Failed to execute 'appendChild&apos
这篇文章主要为大家介绍了vue报错Failed to execute 'appendChild' on 'Node'解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11Vue 3.0 前瞻Vue Function API新特性体验
这篇文章主要介绍了Vue 3.0 前瞻Vue Function API新特性体验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-08-08Vue中使用 ElementUi 的 el-select 实现全选功能(思路详解
在开发中,有一个需求是 选项组件中使用到一个 全选的功能,特在这记录下实现的方法,方便后续的查阅,以及方便大家查阅借鉴,对vue ElementUi 全选功能感兴趣的朋友一起看看吧2024-02-02
最新评论