vue 设置事件总线 EventBus

忘是亡心i 2022-12-29 07:00 213阅读 0赞

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

  1. class EventBus {
  2. constructor(){
  3. (this as any).callbacks = {}
  4. }
  5. /**
  6. * 事件总线中注册事件 singleFlag为true 表示只能注册一次 防止重复执行
  7. * @param name
  8. * @param fn
  9. * @param singleFlag
  10. */
  11. $on(name:any, fn:any,singleFlag=false){
  12. if(singleFlag){
  13. (this as any).callbacks[name] = (this as any).callbacks[name] || [];
  14. (this as any).callbacks[name][0]=fn;
  15. }else{
  16. (this as any).callbacks[name] = (this as any).callbacks[name] || [];
  17. (this as any).callbacks[name].push(fn)
  18. }
  19. }
  20. /**
  21. * 事件触发
  22. * @param name
  23. * @param args
  24. */
  25. $emit(name:any, args:any){
  26. if((this as any).callbacks[name]){
  27. (this as any).callbacks[name].forEach((cb:any) => cb(args))
  28. }
  29. }
  30. }
  31. export default EventBus;

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

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

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

  1. this.$bus && this.$bus.$on(this.sectionId + "_tabChange", ({sectionId, item}) => {
  2. if (window.appObj.sysName === "groupAdmin") {
  3. this.initTempDataItems();
  4. } else {
  5. this.initDataByUrl();
  6. }
  7. }, true);
  8. //点击弹出更多界面
  9. this.$bus && this.$bus.$on(this.sectionId + "_moreLinkClick", ({sectionId, item, moreUrl}) => {
  10. this.jumpToPage(moreUrl);
  11. }, true);

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

  1. this.$bus&&this.$bus.$emit(this.sectionId+"_tabChange",{sectionId:this.sectionId,item});

发表评论

表情:
评论列表 (有 0 条评论,213人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javafx事件总线EventBus

    > JAVAFX EventBus是一个轻量级的事件总线框架,用于在JavaFX应用程序中实现基于事件的通信和解耦。它提供了一种简单的方式,让组件能够订阅和发布事件,从而使得应