如果在你项目中需要多处用到同级组件通讯,而又不想去写繁琐的vuex,可以参考这个小思路。本人在写项目中琢磨出来的,感觉挺好用,分享一下。

1.在utils文件夹下添加BusEvent.js

注释已经很详细了,也很简单,不再过多阐述。


import Vue from "vue";
const Bus = new Vue(); /**
* 同级组件通讯,提交事件
* @param {String} component 要提交的目标组件名称
* @param {string} action 要调用目标组件的方法名
* @param {any} param 目标组件的方法参数
*/
export const BusEmit = (component, action, param) => {
Bus.$emit(component, action, param);
}; /**
* 同级组件通讯,监听销毁事件
*/
export const BusOn = {
mounted() {
Bus.$on(`${this.$options.name}`, this.onBusAction);
},
beforeDestroy() {
Bus.$off(`${this.$options.name}`, this.onBusAction);
},
methods: {
onBusAction(action, param) {
log(`调用组件:${this.$options.name},方法:${action},参数:${param}`);
this[action](param);
}
}
};

2.需要监听事件的组件

引入 BusOn 挂载在组件的mixins上。


import { BusOn} from "@/utils/BusEvent";
export default {
name: "app",
mixins: [BusOn],
methods: {
show(is){
console.log(is);
}
}

3.发起通讯的组件

引入 BusEmit 发起同级组件通讯。


import { BusEmit} from "@/utils/BusEvent";
export default {
name: "child",
methods: {
emitShow(is){
//大概意思:我要调用 app 组件的 show 方法,并且传了一个 true 的参数
BusEmit("app","show",true)
}
}

好处:

  • 不用每个组件去引入Bus,然后在 mounted 监听,beforeDestroy 销毁(eventbus监听事件必须销毁),很繁琐。
  • 提供了良好的扩展,你想调用哪个组件,调用哪个方法,传递什么参数,很清晰。
  • 你可以在其他 js 文件 去引入并且调用组件的方法。

比如:在 htttp.js

省略了若干代码,定义了一个处理报错信息的函数。


import { BusEmit } from "../utils/event-bus";
**
* 请求失败后的错误统一处理
* * @param {Number} status 请求失败的状态码
*/
const errorHandle = err => {
//....省略
BusEmit("app","toast",{
text:'连接到服务器失败',
time:1000,
})
}

当然你可以在 BusEvent.js 进行更多的封装,或者你有更好的思路,欢迎分享讨论。

原文地址:https://segmentfault.com/a/1190000016992424

seventBus(封装) 一个巧妙的解决vue同级组件通讯的思路的更多相关文章

  1. vue-concise-slider 一个轻量的vue幻灯片组件

    vue-concise-slider 一个轻量的vue幻灯片组件 阅读 541 收藏 35 2017-07-03 原文链接:github.com 外卖订单处理有烦恼?试试美团点评餐饮开放平台吧,可实现 ...

  2. 【整理】解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function

    解决vue不相关组件之间的数据传递----vuex的学习笔记,解决报错this.$store.commit is not a function https://www.cnblogs.com/jaso ...

  3. 一个故事讲懂vue父子组件传值

    作者:李佳明同学链接:https://www.jianshu.com/p/2272b6ca0f0c 一个故事讲懂vue父子组件传值 讲故事前先讲代码 父组件向子组件传值 父组件数据传递给子组件可以通过 ...

  4. vue的组件通讯

    Vue的组件通讯又称组件传值 一.父子组件传值: 父组件: <子组件名   :动态变量名 (随便起)='你想要传递的数据' ></子组件名> 子组件: 利用 prop去接收父组 ...

  5. 使用vue.js封装一个包含图片的跑马灯组件

    初衷: 学习完Vuejs后,来准备练习仿写一下老东家的门户页面,主要是为了熟悉一下常用插件的使用,比如video.js,wow.js,swiper等等:而其中涉及到一个包含图片跑马灯组件,大概长这样( ...

  6. 封装一个优雅的element ui表格组件

    现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...

  7. vue同胞组件通讯解决方案(以下为一种另外可用vuex解决)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 深入理解Vue父子组件通讯的属性和事件

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...

  9. vue的组件通讯 父传子 -- 子传父-- 兄弟组件的传值 vue的组件传值

    首先文字简单撸一下 父子传子   -------首先在父组件上绑定一个属性,在子组件里用props接收,可以是数组或者是对象 子传父   ------在父组件升上自定义一个方法,在子组件里通过this ...

随机推荐

  1. 关于Java的TreeMap

    今天写代码的时候需要做这样的一件事情 从一个文件中读取数据,得到数百万个含有time,uid,text的对象,去重之后再根据time排序 第一反应是使用TreeMap 重载了equals和hashCo ...

  2. python 操作系统和进程

    一. 操作系统介绍 多道程序系统 多道程序设计技术       所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种 ...

  3. Redis - 事务操作与详解

    https://blog.csdn.net/J080624/article/details/81669560   写的比较清楚的一个帖子

  4. Android动画中Interpolator 详解和演示

    遇到一个项目需求,想让动画变得更活泼一点,于是想到了动画属性中的Interpolator,写了基本例子测试一下Android提供给我们现成的加速器的效果: 效果 代码中方法 xml中属性 越来越快 A ...

  5. ubuntu配置django

    安装 安装Apache sudo apt-get install apache2 安装Django 下载Django 安装mod_wsgi sudo apt-get install libapache ...

  6. AngularJS的Foreach循环示例

    代码下载:https://files.cnblogs.com/files/xiandedanteng/angularJSForeach.rar 代码: <!DOCTYPE HTML PUBLIC ...

  7. Google Chrome浏览器之删除Goolge搜索结果重定向插件Remove Google Redirects

    https://chrome.google.com/webstore/detail/remove-google-redirects/ccenmflbeofaceccfhhggbagkblihpoh?h ...

  8. 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上

    小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使 ...

  9. Audio原理图设计

    1.DMIC 1)当双MIC时,通过MIC上的Selection PIN脚PULL  U/D进行左右channel选择.

  10. Nexus 5更新 Android5.0 失败解决方法

    Android 5.0最终推出了正式版,今天也及时刷到了Android5.0 (LRX21O),官方链接:https://developers.google.com/android/nexus/ima ...