typeScript 发布订阅 eventBus 模拟vue2

class Bus {

    list: { [key: string]: Array<Function> };

    constructor() {

        // 收集订阅信息,调度中心

        this.list = {};

    }

    // 订阅

    $on(name: string, fn: Function) {

        this.list[name] = this.list[name] || [];

        this.list[name].push(fn);

    }

    // 发布

    $emit(name: string, data?: any) {

        if (this.list[name]) {

            this.list[name].forEach((fn: Function) => {

                fn(data);

            });

        }

    }

    // 取消订阅

    $off(name: string) {

        if (this.list[name]) {

            delete this.list[name];

        }

    }

}

const Eve = new Bus()  // 实例化

export default Eve;

import Eve from '@/utils/eventBus' // 订阅模式夸组件事件

const handleClick = () => {

    Eve.$emit('handleMenu','hello1') // 发布

}

  import Eve from '@/utils/eventBus' // 订阅模式夸组件事件

  // 页面挂载

  onMounted(() => {

      Eve.$on("handleMenu", (v) => {

        handleMenu1(v)  // 接收

      });

  })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值