浅谈vue中$bus的使用和涉及到的问题


Posted in Javascript onJuly 28, 2020

Hello大家周末好,最近项目比较忙所以没有及时的更新抱歉,今天给大家讲一vue.bus。使用过的都知道$bus是兄弟之间相互传值的项目中说实话用的地方不算多但是也会用到(每一个领域都是会有坑的呀)。

1:创建$bus文件

创建一个文件内容如下:

import Vue from 'vue'

export default new Vue();

2:引入$bus

main.js: import Bus from './views/bus/bus';

Vue.prototype.$bus = Bus; //注意这里的Vue是我上面引入的vue import Vue from 'vue'

3:使用传值

this.$bus.$emit("vaPage",value); //很像父子之间传值的方法

4:接收

this.$bus.$on("vaPage", v =>{ //vaPage传的时候的key是什么接收就必须是什么
  console.log(v); //v是传来的值,可以接收多个参数
 })

5:填坑之路

大家假设一下一个场景现在有3个组件分别是A(父组件),B(子组件),C(子组件)

这时候B,C之间的通信就可以用$bus了,比如我在B中进行了操作然后要刷新自己和C组件的dom咱们就可以通过this.$bus.$emit(key,value); 然后C接受this.$bus.$on("key",v=>{});可以在这个组件调用方法什么的你在这里调用方法的时候会发现我只写了一次调用初始化的函数为啥会调用多少而且不刷新页面的时候越来越多,这是需要使用到咱们的生命周期函数beforDestroy在当前组件销毁的时候注销这个$bus的方法:beforDestroy(){this.$bus.$off("val")//关闭$Bus}.

6:总结

使用$bus的时候在接受bus的组件中别忘了再beforDestroy函数中销毁bus,不销毁的话会一直叠加的调用这个方法:

beforDestroy(){
   this.$bus.$off("vaPage"); //当这个组件销毁的时候bus也跟着一起销毁
  }

补充知识:vue-bus中央事件总线(兄弟组件之间传值)

1.作用:

非父子组件(例如兄弟组件)之间传值的方式,可以用vuex,也可以用事件总线,已下是事件总线(vue-bus)的介绍:

2、注册

在main.js中注册

import Vue from 'vue';
import VueBus from 'vue-bus';//中央事件总线
...
Vue.use(VueBus);
...

3、使用

A页面传递给B也页面:

A页面中,触发了一个叫toBPage的事件,并传递了参数'hello world!'

...
methods: {
 toBPage(){
 this.$bus.emit('bPage', 'hello world!');
 },
}
...

B页面中,this.$bus.on监听了bPage并传入了回调函数this.getBPage,该回调函数的参数就是传递过来的数据

created() {
 this.$bus.on('bPage', this.getBPage);
},
methods: {
 getBPage(item){
 console.log(item);//item就是传递过来的数据
 },
}

4.离开该页面时就无需再监听了,所以要销毁该监听事件,this.$bus.off就是销毁该监听事件

beforeDestroy() {
 this.$bus.off('bPage', this.getBPage);
},

以上这篇浅谈vue中$bus的使用和涉及到的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js日期联动示例
May 02 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 Javascript
AngularJS 表达式详解及实例代码
Sep 14 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
vue-router 导航钩子的具体使用方法
Aug 31 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
Dec 26 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
Vue+ElementUI table实现表格分页
Dec 14 Javascript
详解关于Vue单元测试的几个坑
Apr 26 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 Javascript
create-react-app开发常用配置教程
Jun 25 Javascript
js实现全选和全不选功能
Jul 28 #Javascript
JavaScript React如何修改默认端口号方法详解
Jul 28 #Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 #Javascript
Postman如何实现参数化执行及断言处理
Jul 28 #Javascript
微信小程序实现电子签名功能
Jul 29 #Javascript
Vue的自定义组件不能使用click方法的解决
Jul 28 #Javascript
浅谈JavaScript中this的指向问题
Jul 28 #Javascript
You might like
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python3搜索及替换文件中文本的方法
2015/05/22 Python
python装饰器初探(推荐)
2016/07/21 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python pass详细介绍及实例代码
2016/11/24 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python3访问字典里的值实例方法
2020/11/18 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
集中整治工作方案
2014/05/01 职场文书
文明礼仪标语
2014/06/13 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书