vue的keep-alive中使用EventBus的方法


Posted in Javascript onApril 23, 2019

最近项目中由于列表居多且都做了下拉刷新上拉加载,所以就使用了keep-alive组件来缓存页面数据,但是当在其他页面做一些操作改变了列表数据,当来到列表的时候每次都要下拉刷新一下,体验不好,所以就使用到了EventBus,在需要更新的时候就用EventBus来刷新列表。

1.keep-alive组件

keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素。但是对于展示型页面比较好用,表单类页面也会将所填数据保存起来,对于那种表单没提交又需要保存所填数据的场景非常实用。

keep-alive所缓存的页面只会执行一次created和mounted,也就是在第一次进入才会执行。但是又会多两个生命周期,分别是activated、deactivated,activated在每次进入执行而deactivated在每次离开前执行。 当然有些页面不需要缓存,就要进行一些处理,这里就不多讲了,因为估计大家都知道(不知道百度去...)。

2.EventBus(事件总线)

EventBus用于实现组件之间的数据通讯,使用起来非常之简单。只需要在main.js中加入以下代码:

Vue.prototype.$eventBus = new Vue();

上面代码就创建了一个全局EventBus,其实就是一个vue实例。

这样我们就可以在各个页面中使用了。

在页面中使用 $emit 方法就可以触发事件,然后组件中使用 $on 方法就可以监听对应事件,这个和组件之间传值是一样的。不过这个可以在非父子组件中传递状态,和vuex差不多。当然这种方法在简单应用中可以使用,复杂的应用应该使用 vuex ,这样方便管理和维护。

this.$eventBus.$emit('msg',data);// 触发事件
this.$eventBus.$on('msg',(data)=>{}) // 监听事件

3.组合使用

这两个我感觉很配,当我们使用keep-alive缓存了页面组件,我们需要在A面来触发B页面的列表刷新或其他方法时,这时候使用EventBus就非常方便,其他方法也可以,比如说使用vuex,但是此时就没有直接使用EventBus方便快捷了。 当我们在页面中使用了 this.$eventBus.$on 去监听一个事件,只要页面被缓存,就可以监听到其他页面触发的事件。这样我们就可以减少一些不必要的请求,而且在需要更新的时候去更新,也可以做一些其他的操作,简直美滋滋。

总结

以上所述是小编给大家介绍的vue的keep-alive中使用EventBus的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript string字符串优化问题
Jul 31 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
Aug 01 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
jquery中实现时间戳与日期相互转换
Apr 12 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
May 16 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
react build 后打包发布总结
Aug 24 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
关于Node.js中频繁修改代码重启服务器的问题
Oct 15 Javascript
在vue中使用eslint,配合vscode的操作
Nov 09 Javascript
JS代码编译器Monaco使用方法
Jun 11 Javascript
js继承的这6种方式!(上)
Apr 23 #Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 #jQuery
node.js基于socket.io快速实现一个实时通讯应用
Apr 23 #Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 #Javascript
vue 中 beforeRouteEnter 死循环的问题
Apr 23 #Javascript
JavaScript中十种一步拷贝数组的方法实例详解
Apr 22 #Javascript
vue watch关于对象内的属性监听
Apr 22 #Javascript
You might like
详细介绍PHP应用提速面面观
2006/10/09 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
基于javascript实现tab切换特效
2016/03/29 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
JS重学系列之聊聊new操作符
2019/03/04 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
学年自我鉴定范文
2013/10/01 职场文书
大学本科生的个人自我评价
2013/12/09 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
高三数学教学反思
2016/02/18 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL