详解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小技巧--自动隐藏红叉叉
Aug 13 Javascript
Javascript 调用 ActionScript 的简单方法
Sep 22 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
js实现tab选项卡切换功能
Jan 13 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
Vue中的数据监听和数据交互案例解析
Jul 12 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 Javascript
vue实现点击隐藏与显示实例分享
Feb 13 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
Feb 15 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 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/30 PHP
php读取xml实例代码
2010/01/28 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
PHP 7.0新增加的特性介绍
2017/06/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
js选项卡的实现方法
2015/02/09 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
2016/08/31 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
vue使用echarts画组织结构图
2021/02/06 Vue.js
Python实现合并两个列表的方法分析
2018/05/28 Python
多个应用共存的Django配置方法
2018/05/30 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
python实现网页自动签到功能
2019/01/21 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python创建学生管理系统
2019/11/22 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
行政内勤岗位职责
2014/04/07 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书