详解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 相关文章推荐
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
jquery 操作css样式、位置、尺寸方法汇总
Nov 28 Javascript
JavaScript实现仿网易通行证表单验证
May 25 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
Aug 04 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
Aug 09 Javascript
node.js开发辅助工具nodemon安装与配置详解
Feb 06 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 set_error_handler()函数使用详解(示例)
2013/11/12 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
很酷的javascript loading效果代码
2008/06/18 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
AngularJS实现数据列表的增加、删除和上移下移等功能实例
2016/09/05 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
JavaScript一元正号运算符示例代码
2019/06/30 Javascript
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
Pycharm Plugins加载失败问题解决方案
2020/11/28 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
Delphi软件工程师试题
2013/01/29 面试题
竞聘书格式及范文
2014/03/31 职场文书
父母寄语大全
2014/04/12 职场文书
教师业务学习材料
2014/12/16 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS