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 相关文章推荐
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
返回对象在当前级别中是第几个元素的实现代码
Jan 20 Javascript
javascript代码加载优化方法
Jan 30 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
js中call与apply的用法小结
Dec 28 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 Javascript
解决vue 路由变化页面数据不刷新的问题
Mar 13 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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写出自己的BLOG系统 2
2010/04/12 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
laravel中的错误与日志用法详解
2016/07/26 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
ES6的新特性概览
2016/03/10 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
kali中python版本的切换方法
2019/07/11 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
keras中模型训练class_weight,sample_weight区别说明
2020/05/23 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
《散步》教学反思
2014/03/02 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
教师理论学习心得体会
2016/01/21 职场文书
奖学金发言稿(范文)
2019/08/21 职场文书
原生JS实现飞机大战小游戏
2021/06/09 Javascript
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
python实现一个简单的贪吃蛇游戏附代码
2022/06/28 Python