详解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 相关文章推荐
HTML中Select不用Disabled实现ReadOnly的效果
Apr 07 Javascript
javascript 添加和移除函数的通用方法
Oct 20 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
Oct 29 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
JS 操作Array数组的方法及属性实例解析
Jan 08 Javascript
Javascript之Math对象详解
Jun 07 Javascript
Bootstrap页面布局基础知识全面解析
Jun 13 Javascript
Javascript中 toFixed四舍六入方法
Aug 21 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
javascript触发模拟鼠标点击事件
Jun 26 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开发GUI
2006/10/09 PHP
php实现的SESSION类
2014/12/02 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
php array_map()函数实例用法
2021/03/03 PHP
javascript delete 使用示例代码
2010/03/29 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
jquery实现手风琴案例
2020/05/04 jQuery
深入学习Python中的上下文管理器与else块
2017/08/27 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
简单实现python数独游戏
2018/03/30 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
python绘制直方图和密度图的实例
2019/07/08 Python
解析python实现Lasso回归
2019/09/11 Python
pycharm安装及如何导入numpy
2020/04/03 Python
在Python中实现字典反转案例
2020/12/05 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
教师个人自我鉴定
2014/02/08 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
《称赞》教学反思
2016/02/17 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL