详解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 相关文章推荐
跟随鼠标旋转的文字
Nov 30 Javascript
图片在浏览器中底部对齐 解决方法之一
Nov 30 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
JQuery中dataGrid设置行的高度示例代码
Jan 03 Javascript
js+css实现文字散开重组动画特效代码分享
Aug 21 Javascript
Bootstrap进度条组件知识详解
May 01 Javascript
原生js实现class的添加和删除简单代码
Jul 12 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
BootStrap3使用错误记录及解决办法
Dec 22 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
May 26 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
JavaScript前端实现压缩图片功能
Mar 06 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
德生S2000电路分析
2021/03/02 无线电
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
DOM 事件流详解
2015/01/20 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
tensorflow中next_batch的具体使用
2018/02/02 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
行政人员岗位职责
2013/12/08 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
继承公证书
2014/04/09 职场文书
学校联谊协议书
2014/09/16 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB