详解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 相关文章推荐
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
复制js对象方法(详解)
Jul 08 Javascript
js调试系列 源码定位与调试[基础篇]
Jun 18 Javascript
简单的js表格操作
Sep 24 Javascript
JS控制FileUpload的上传文件类型实例代码
Oct 07 Javascript
JavaScript 最佳实践:帮你提升代码质量
Dec 03 Javascript
原生js编写基于面向对象的分页组件
Dec 05 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
Mar 03 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
Jan 08 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
Feb 03 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 魔术方法使用说明
2009/10/20 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
vue接口请求加密实例
2020/08/11 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
Python基础之getpass模块详细介绍
2017/08/10 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
opencv+python实现均值滤波
2020/02/19 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
产品质量承诺范本
2014/03/31 职场文书
节水倡议书范文
2014/04/15 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
后进生评语大全
2015/01/04 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
Nginx内网单机反向代理的实现
2021/11/07 Servers