≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > vue.js

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

人气:452 时间:2019-04-10

这篇文章主要为大家详细介绍了Vue2.0 事件的广播与接收(观察者模式),具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

 

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

 

 

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

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

【图片暂缺】

官方文档

 

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(你的事件名字)来取消收听就可以啦!

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

本文来自:http://www.q1010.com/184/5145-0.html

注:关于Vue2.0 事件的广播与接收(观察者模式)的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:vue.js

您可能感兴趣的文章

  • vue页面切换到滚动页面显示顶部的实例
  • Vue.js 动态为img的src赋值方法
  • Vue使用mixins实现压缩图片代码
  • vue使用facebook twitter分享示例
  • Vue实现动态创建和删除数据的方法
  • 使用Vue.js开发微信小程序开源框架mpvue解析
  • vue 实现的树形菜的实例代码
  • vue项目关闭eslint校验
  • 基于vue-video-player自定义播放器的方法
  • 基于vue1和vue2获取dom元素的方法
上一篇:解决vue2.0动态绑定图片src属性值初始化时报错的问题
下一篇:vue使用facebook twitter分享示例
热门文章
  • Vue 报错TypeError: this.$set is not a function 的解决方法
  • vue实现动态添加数据滚动条自动滚动到底部的示例代码
  • vue项目设置scrollTop不起作用(总结)
  • vue项目中使用vue-i18n报错的解决方法
  • iview实现select tree树形下拉框的示例代码
  • 分析关于element级联选择器数据回显问题
  • vue项目打包后打开页面空白解决办法
  • 解决element ui select下拉框不回显数据问题的解决
  • element-ui table span-method(行合并)的实现代码
  • element-ui 设置菜单栏展开的方法
  • 最新文章
    • 理解vue ssr原理并自己搭建简单的ssr框架
    • vue favicon设置以及动态修改favicon的方法
    • vue-router启用history模式下的开发及非根目录部署方法
    • 从零开始在NPM上发布一个Vue组件的方法步骤
    • Element input树型下拉框的实现代码
    • Vue 报错TypeError: this.$set is not a function 的解决方法
    • Vue.js组件高级特性实例分析
    • 浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
    • 分析Vue.js自定义tipOnce指令用法实例
    • 浅谈vuex actions和mutation的异曲同工

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。