详解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 相关文章推荐
dropdownlist之间的互相联动实现(显示与隐藏)
Nov 24 Javascript
javascript 程序库的比较(一)之DOM功能
Apr 07 Javascript
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
Apr 11 Javascript
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 Javascript
今天,小程序正式支持 SVG
Apr 20 Javascript
angular多语言配置详解
May 16 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
php 静态化实现代码
2009/03/20 PHP
PHP取整数函数常用的四种方法小结
2012/07/05 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
Python logging设置和logger解析
2019/08/28 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
python属于软件吗
2020/06/18 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
爱国演讲稿400字
2014/05/07 职场文书
大学生村官入党自传
2015/06/26 职场文书
商务宴会祝酒词
2015/08/11 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL