vue 设置事件总线 EventBus

有些场景下使用 EventBus 总线要让代码简单许多。
第一步:编写EventBus类

 class EventBus {
    constructor(){
        (this as any).callbacks = {}
    }

    /**
     * 事件总线中注册事件 singleFlag为true 表示只能注册一次 防止重复执行
     * @param name
     * @param fn
     * @param singleFlag
     */
    $on(name:any, fn:any,singleFlag=false){
        if(singleFlag){
            (this as any).callbacks[name] = (this as any).callbacks[name] || [];
            (this as any).callbacks[name][0]=fn;
        }else{
            (this as any).callbacks[name] = (this as any).callbacks[name] || [];
            (this as any).callbacks[name].push(fn)
        }
    }

    /**
     * 事件触发
     * @param name
     * @param args
     */
    $emit(name:any, args:any){
        if((this as any).callbacks[name]){
            (this as any).callbacks[name].forEach((cb:any) => cb(args))
        }
    }
}

export default EventBus;

第二步:将事件总线放入到vue中,找到main.js文件加入如下代码

Vue.prototype.$bus = new EventBus();

第三步:则就是注册事件了

    this.$bus && this.$bus.$on(this.sectionId + "_tabChange", ({sectionId, item}) => {
                    if (window.appObj.sysName === "groupAdmin") {
                        this.initTempDataItems();
                    } else {
                        this.initDataByUrl();
                    }
                }, true);
   //点击弹出更多界面
                this.$bus && this.$bus.$on(this.sectionId + "_moreLinkClick", ({sectionId, item, moreUrl}) => {
                    this.jumpToPage(moreUrl);
                }, true);

第四步:则就是触发事件了:

 this.$bus&&this.$bus.$emit(this.sectionId+"_tabChange",{sectionId:this.sectionId,item});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值