详解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 相关文章推荐
input 输入框内的输入事件详细分析
Mar 17 Javascript
javascript 动态修改样式和层叠样式表代码
Apr 27 Javascript
为超链接加上disabled后的故事
Dec 10 Javascript
使用jquery prev()方法找到同级的前一个元素
Jul 11 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
Angular.js中$resource高大上的数据交互详解
Jul 30 Javascript
Element Cascader 级联选择器的使用示例
Jul 27 Javascript
vue实现下拉菜单树
Oct 22 Javascript
详解JavaScript中的this指向问题
Feb 05 Javascript
测量JavaScript函数的性能各种方式对比
Apr 27 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 empty函数 使用说明
2009/08/10 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
python 切片和range()用法说明
2013/03/24 Python
Python 字典(Dictionary)操作详解
2014/03/11 Python
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
学习python需要有编程基础吗
2020/06/02 Python
python为什么会环境变量设置不成功
2020/06/23 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
Python类class参数self原理解析
2020/11/19 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
自动化系在校本科生求职信
2013/10/23 职场文书
行政助理岗位职责
2013/11/10 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python