详解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 相关文章推荐
JS操作JSON要领详细总结
Aug 25 Javascript
整理的比较全的event对像在ie与firefox浏览器中的区别
Nov 25 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
Apr 16 Javascript
jquery自定义下拉列表示例
Apr 25 Javascript
JS获取及验证开始结束日期的方法
Aug 20 Javascript
详解Angualr 组件间通信
Jan 21 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
Apr 27 Javascript
javaScript之split与join的区别(详解)
Nov 08 Javascript
收集前端面试题之url、href、src
Mar 22 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
浅谈如何优雅处理JavaScript异步错误
Nov 12 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
网页javascript精华代码集
2007/01/24 Javascript
JavaScript 三种创建对象的方法
2009/10/16 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
浅析JavaScript中break、continue和return的区别
2016/11/30 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
vue axios封装及API统一管理的方法
2019/04/18 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python 可爱的大小写
2008/09/06 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
环境工程大学生自荐信
2013/10/21 职场文书
敬老院院长事迹材料
2014/05/21 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
三行辞职书范文
2015/02/26 职场文书
未中标通知书
2015/04/17 职场文书
《角的度量》教学反思
2016/02/18 职场文书