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 相关文章推荐
选择TreeView控件的树状数据节点的JS方法(jquery)
Feb 06 Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
jQuery右下角旋转环状菜单特效代码
Aug 10 Javascript
javascript动态添加checkbox复选框的方法
Dec 23 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
Node连接mysql数据库方法介绍
Feb 07 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
Mar 23 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
Sep 11 Javascript
element-ui点击查看大图的方法示例
Dec 14 Javascript
Js类的构建与继承案例详解
Sep 15 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与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
js中判断控件是否存在
2010/08/25 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
javascript动态加载三
2012/08/22 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
javascript表单验证大全
2015/08/12 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
2016/09/23 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python装饰器使用示例及实际应用例子
2015/03/06 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
python使用str & repr转换字符串
2016/10/13 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python 显示数组全部元素的方法
2018/04/19 Python
python已协程方式处理任务实现过程
2019/12/27 Python
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
你知道Java Spring的两种事务吗
2022/03/16 Java/Android
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android