vue中的event bus非父子组件通信解析


Posted in Javascript onOctober 27, 2017

有时候非父子关系的组件也需要通信。在简单的场景下,使用一个空的Vue实例作为中央事件总线:

var bus = new Vue()
// 触发组件 A 中的事件
bus.$emit('id-selected', 1)
// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
 // ...
})

在更多复杂的情况下,你应该考虑使用专门的 状态管理模式.就是用到了vuex

eventBus是作为兄弟关系的组件之间的通讯中介。

代码示例:

<!DOCTYPE html>
<html>
<head>
<title>eventBus</title>
<script src="http://cdn.jsdelivr.net/vue/1.0.28/vue.min.js"></script>
</head>
<body>
<div id="todo-app">
<h1>todo app</h1>
<new-todo></new-todo>
<todo-list></todo-list>
</div>
<script>
var eventHub = new Vue( {
data(){
return{
todos:['A','B','C']
}
},
created:function () {
this.$on('add', this.addTodo)
this.$on('delete', this.deleteTodo)
},
beforeDestroy:function () {
this.$off('add', this.addTodo)
this.$off('delete', this.deleteTodo)
},
methods: {
addTodo: function (newTodo) {
this.todos.push(newTodo)
},
deleteTodo: function (i) {
this.todos.splice(i,1)
}
}
})
var newTodo = {
template:`<div><input type="text" autofocus v-model="newtodo"/><button @click="add">add</button></div>`,
data(){
return{
newtodo:''
}
},
methods:{
add:function(){
eventHub.$emit('add', this.newtodo)
this.newtodo = ''
}
}
}
var todoList = {
template:`<ul><li v-for="(index,item) in items">{{item}} \
     <button @click="rm(index)">X</button></li> \
     </ul>`,
     data(){
     return{
     items:eventHub.todos
     }
     },
     methods:{
     rm:function(i){
     eventHub.$emit('delete',i)
     }
     }
}
var app= new Vue({
el:'#todo-app',
components:{
newTodo:newTodo,
todoList:todoList
}
})
</script>
</body>
</html>

效果图如下:

vue中的event bus非父子组件通信解析

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

Javascript 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
js 控制页面跳转的5种方法
Sep 09 Javascript
javascript在IE下trim函数无法使用的解决方法
Sep 12 Javascript
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
package.json文件配置详解
Jun 15 Javascript
JS滚动到指定位置导航栏固定顶部
Jul 03 Javascript
webpack4 CSS Tree Shaking的使用
Sep 03 Javascript
Vue请求JSON Server服务器数据的实现方法
Nov 02 Javascript
给localStorage设置一个过期时间的方法分享
Nov 06 Javascript
详解javascript设计模式三:代理模式
Mar 25 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
JS实现可视化音频效果的实例代码
Jan 16 Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 #Javascript
webpack配置之后端渲染详解
Oct 26 #Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 #Javascript
node文字生成图片的示例代码
Oct 26 #Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 #Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 #Javascript
You might like
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php生成短域名函数
2015/03/23 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python调用C语言开发的共享库方法实例
2015/03/18 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
pyhton列表转换为数组的实例
2018/04/04 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
Python饼状图的绘制实例
2019/01/15 Python
Python函数基本使用原理详解
2020/03/19 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
成功的酒店创业计划书
2013/12/27 职场文书
团日活动总结范文
2014/04/25 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python