详解Vue2.0 事件派发与接收


Posted in Javascript onSeptember 05, 2017

由于vue2.0 移除了1.0中的$dispatch 和$broadcast 这两个组件之间通信传递数据的方法 ,官方的给出的最简单的升级建议是使用集中的事件处理器,而且也明确说明了 一个空的vue实例就可以做到,因为Vue 实例实现了一个事件分发接口.

请直接看代码,在初始化web app的时候,给data添加一个 名字为eventhub 的空vue对象

new Vue({
 el: '#app',
 router,
 render: h => h(App),
 data: {
  eventHub: new Vue()
 }
})

好的 这个时候 你就可以一劳永逸了,在任何组件都可以调用事件发射 接受的方法了.

如何获取到这个空的vue对象 eventhub呢.在组件里面直接调用这个

某一个组件内调用事件触发

//通过this.$root.eventHub获取此对象
//调用$emit 方法
this.$root.eventHub.$emit('YOUR_EVENT_NAME', yourData)

另一个组件内调用事件接受,当然在组件销毁时接触绑定,使用$off方法

this.$root.eventHub.$on('YOUR_EVENT_NAME', (yourData)=>{
  handle(yourData)
} )

遇到一个问题 ,考虑特定场景:

跳转路由之前我们调用了$emit方法,这个方法在A组件里面处理数据,但是A组件绑定$on事件之前 $emit事件已经发射,所以这会导致一直接受不到消息,看来这个事件绑定有时效性问题,你可以setTimeout来做一下延时,但是这个特别奇怪,那就把数据存到store然后等A组件加载完了再去取。。。。

在初始化Web app 之前 加上这样一句:

Vue.prototype.$eventHub= Vue.prototype.$eventHub || new Vue()

当然我们可以定义其他的全局变量.比如当前app的系统配置文件,名字为sysconfig.json,你可以这样定义

Vue.prototype.$config =Vue.prototype.$config||require('path/sysconfig.json')

这样我们在组件内部 就可以直接调用$eventHub 和 $config对象了。

比如 在mounted函数里面直接 console.log($config.yourKey)

record on 1.1.2017

刚才看到了webpack的插件里面有一个definePlugin 它可以帮我们定义全局的常量。

如何使用,很简单但是更好,我们不用去修改Vue对象:

new webpack.DefinePlugin({
 CONFIG: require('path/sysconfig.json')
});

然后我们也可以在全局内使用CONFIG对象了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
让Firefox支持event对象实现代码
Nov 07 Javascript
Javascript 赋值机制详解
Nov 23 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
Oct 15 Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 Javascript
JS字符串false转boolean的方法(推荐)
Mar 08 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
Mar 13 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 #Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 #jQuery
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 #Javascript
详解vue-cli本地环境API代理设置和解决跨域
Sep 05 #Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 #Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 #Javascript
Angular实现下载安装包的功能代码分享
Sep 05 #Javascript
You might like
用PHP和MySQL保存和输出图片
2006/10/09 PHP
php异常处理使用示例
2014/02/25 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
JavaScript面向对象编程
2008/03/02 Javascript
javascript 触发事件列表 比较不错
2009/09/03 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
jQuery each()方法的使用方法
2010/03/18 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
python实现AES加密和解密
2019/03/27 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
Python中psutil的介绍与用法
2019/05/02 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
使用Django清空数据库并重新生成
2020/04/03 Python
详解Python中import机制
2020/09/11 Python
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
计算机系本科生求职信
2014/05/31 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
研讨会致辞
2015/07/31 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏
Python使用pyecharts控件绘制图表
2022/06/05 Python