美文网首页
eventBus封装

eventBus封装

作者: liwuwuzhi | 来源:发表于2020-07-16 15:57 被阅读0次

中央事件总线eventBus的实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信。它是实现非父子组件通信的一种解决方案。

eventBus 一般用法

而 eventBus实现也非常简单

import Vue from 'Vue'
export default new Vue

我们在使用中经常最容易忽视,又必然不能忘记的东西,那就是:清除事件总线 eventBus。

不手动清除,它是一直会存在,这样当前执行时,会反复进入到接受数据的组件内操作获取数据,原本只执行一次的获取的操作将会有多次操作。本来只会触发并只执行一次,变成了多次,这个问题就非常严重。

当不断进行操作几分钟后,页面就会卡顿,并占用大量内存。

所以一般在vue生命周期 beforeDestroy或者 destroyed中,需要用vue实例的 $off方法清除 eventBus

beforeDestroy () {
  bus.$off('click')
}

可当你有多个 eventBus时,就需要重复性劳动 $off销毁这件事儿。
这时候封装一个 eventBus就是更佳的解决方案。

拥有生命周期的 eventBus

我们从Vue.init中可以得知:

Vue.prototype._init = function () {
  const vm: Component = this
  // a uid vm实例唯一标识
  vm._uid = uid ++
  // ...
}

每个Vue实例有自己的 _uid作为唯一标识,因此我们让 EventBus和_uid`关联起来,并将其改造:


image.png

main.js中注册:

import EventBus from './eventBus.js'
Vue.use(EnemtBus)

组件中使用:

created () {
    /**
     * @description 订阅 on-change 事件
     * @param
     *   参数1 事件名
     *   参数2 事件传递参数
     *   参数3 默认为当前组件this,如果不传则需要手动销毁
     */
    this.$eventBus.$on('on-change', (...args) => {
      console.log(...args)
      //
    }, this)
  }
  methods () {
    onChangeHandle() {
      this.$eventBus.$emit('on-change', '传递参数1', '传递参数2')
    }
  },
  beforeDestroy () {
    // 不再需要手动销毁eventBus订阅事件
  }

相关文章

  • EventBus封装

    EventBus是一款针对Android优化的发布/订阅事件总线。可以替代广播、startActivityForR...

  • eventBus封装

    中央事件总线eventBus的实质就是创建一个vue实例,通过一个空的vue实例作为桥梁实现vue组件间的通信。它...

  • Android EventBus 封装

    EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化事件传递。既可以用于 An...

  • Android EventBus 封装

    EventBus是一款针对Android优化的发布/订阅事件总线。可以替代广播、startActivityForR...

  • Android项目实战 EventBus的封装

    EventBus 大部分人都用过了,就不再介绍了,本篇主要讲一下实际项目中EventBus的封装过程。 1、正常用...

  • EventBus3 封装

    思路 封装一个EventBus工具类,消息类MessageEvent 在BaseActivity中选择注册及接收消...

  • EventBus使用封装整理

    继承类: import org.greenrobot.eventbus.EventBus; import org....

  • Android - EventBus 的封装

    EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化事件传递。既可以用于 An...

  • EventBus事件的简单封装

    Talk is Cheap.

  • 深扒 EventBus:解锁新姿势

    本文章已授权玉刚说微信公众号预发布中 封装优化 今天将 EventBus 封装到基类中报错了 先翻译一下这段报错的...

网友评论

      本文标题:eventBus封装

      本文链接:https://www.haomeiwen.com/subject/rwiphktx.html