详解Vue2.0 事件派发与接收

发布时间 - 2026-01-11 03:06:55    点击率:

由于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组件加载完了再去取。。。。

官方文档请点击我

record on 12 24

在stackoverflow 发现一个更加简洁的方法,因为本质上vue是一个js对象,我们想保存一个全局对象,只需要在Vue的prototype上面增加一个属性即可,本质上所有Vue组件都是继承全局的Vue。只要在初始化Vue对象之前给原生Vue对象prototype增加属性,那样所有的组件(因为都是继承自它的实例)都可以访问到这个属性。相关资料请参考我之前的文章关于函数的构造函数和prototype<四>

在初始化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对象了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Vue2.0  # 事件派发与接收 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 个人网站制作流程图片大全,个人网站如何注销?  Android Socket接口实现即时通讯实例代码  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何快速选择适合个人网站的云服务器配置?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  iOS UIView常见属性方法小结  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  详解jQuery停止动画——stop()方法的使用  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何快速生成可下载的建站源码工具?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何实现javascript表单验证_正则表达式有哪些实用技巧  潮流网站制作头像软件下载,适合母子的网名有哪些?  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何在阿里云虚拟服务器快速搭建网站?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Python3.6正式版新特性预览  如何在建站宝盒中设置产品搜索功能?  如何有效防御Web建站篡改攻击?  如何用景安虚拟主机手机版绑定域名建站?  如何在阿里云高效完成企业建站全流程?  html如何与html链接_实现多个HTML页面互相链接【互相】  linux写shell需要注意的问题(必看)  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何快速搭建高效WAP手机网站吸引移动用户?  Bootstrap整体框架之JavaScript插件架构  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  在centOS 7安装mysql 5.7的详细教程  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何确保西部建站助手FTP传输的安全性?  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何快速查询域名建站关键信息?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel中的Facade(门面)到底是什么原理  JavaScript如何实现类型判断_typeof和instanceof有什么区别  如何在景安云服务器上绑定域名并配置虚拟主机?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel Fortify是什么,和Jetstream有什么关系  简历在线制作网站免费版,如何创建个人简历?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Android 常见的图片加载框架详细介绍  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  用yum安装MySQLdb模块的步骤方法