Vue2.0 事件的广播与接收(观察者模式)


Posted in Javascript onMarch 14, 2018

1.Vue1.0 事件的广播与接收(观察者模式)

早期vue1.0组件之间的这通信传递数据的方法,vue官网给出了两上方法 $dispatch 和 $broadcast。

但vue2.0之后就弃用 这两个方法,以下原因是vue官网给出来的

Vue2.0 事件的广播与接收(观察者模式)

官方文档

2.Vue2.0 事件的广播与接收(观察者模式)

vue2.0中可以使用 $emit, $on, $off 分别来分发、监听、取消监听事件。官方的给出的最简单的升级建议是使用集中的事件处理器,而且也明确说明了 一个空的vue实例就可以做到,因为Vue 实例实现了一个事件分发接口.

请直接看代码,在初始化的时候,在全局App.vue文件中给data添加一个 名字为eventhub 的空vue对象:

new Vue({
 el: '#app',
 router,
 render: h => h(App),
 data: {
  eventHub: new Vue()
 }
})

这样我们就可以在任何组件都可以调用事件发射接收的方法了.那么在组件是如何发射与接收的呢?请看正面代码 :

某一个组件内调用事件触发

//通过this.$root.eventHub获取此对象
//调用$emit 方法
this.$root.eventHub.$emit('你的事件名字', 你的需要传送的数据)

以上就是一个组件发射了一个事件 ,可以理解成我发送了一个广播,如果其它组件有需要我的广播,那么请调整到我的频道,这个频道就是你的事件名字,而广播的内容就是你传送的数据,那么问题了,其它组件是用什么方法来接收呢?请看代码

this.$root.eventHub.$on('你的事件名字', (传送的数据)=>{
  handle(yourData)
} )

需要收听广播的组件可以通过我们全局定义的eventHub.$on来接收,接收频道就是广播的事件名字,回调里面有数就是广播内容。

3.更加简洁的写好

对js有一定的了解,可能知道js有一个prototype的东西,这个主要的给js对象增加额外的属性。

比如 声明一个对象

var person=function(){
  this.name="小明";
}

然后我们扩展一下这个对象,比如增加一个讲话的方法,这时prototype这个好用的东西就派上用场了

person.prototype.say=function(){
  alert(this.name);
}

这样就扩展了原来的函数对象了

调用的时候直接

var a=new person();

person.say();就会弹出小明来了。这么做的好处是不会额外产生内存,所有实例化后的对象都会从原型上继承这个方法。

Vue其实就是js一个类库,当然也可以用prototype这个神奇的东西来拓展自定义的属性了,看招:

在初始化Vue.app 之前 加上这样一句:

Vue.prototype.$eventHub= Vue.prototype.$eventHub || new Vue()

这样我们在组件内部 就可以直接调用$eventHub

以下是对上面的方法重新 改造:

发布者

//通过this.$root.eventHub获取此对象
//调用$emit 方法
this.$eventHub.$emit('你的事件名字', 你的需要传送的数据)

接收者

this.$eventHub.$on('你的事件名字', (传送)=>{
    handle(yourData).
  } )

4.关闭广播

关闭广播我们主要通过 $off(你的事件名字)来取消收听就可以啦!

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

Javascript 相关文章推荐
javascript 全角转换实现代码
Jul 17 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
Aug 08 Javascript
jQuery动态修改超链接地址的方法
Feb 13 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
Sep 05 Javascript
AngularJS中$http使用的简单介绍
Mar 17 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
详解如何使用webpack打包JS
Jun 21 Javascript
ajaxfileupload.js实现上传文件功能
Apr 19 Javascript
小程序自定义弹框效果
Nov 16 Javascript
vue项目国际化vue-i18n的安装使用教程
Mar 14 #Javascript
Vue使用mixins实现压缩图片代码
Mar 14 #Javascript
vue2.0模拟锚点的实例
Mar 14 #Javascript
vue的mixins属性详解
Mar 14 #Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 #Javascript
react中fetch之cors跨域请求的实现方法
Mar 14 #Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 #Javascript
You might like
php查看session内容的函数
2008/08/27 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
javascript类型转换使用方法
2014/02/08 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
微信公众号支付H5调用支付解析
2016/11/04 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
2019/07/03 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python实现键盘控制鼠标移动
2020/11/27 Python
python opencv实现图像边缘检测
2019/04/29 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
大学生毕业自我鉴定
2013/11/06 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
商场中秋节活动方案
2014/02/07 职场文书
《太阳》教学反思
2014/02/21 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL