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 相关文章推荐
jquery插件之easing使用
Aug 19 Javascript
javascript对数组的常用操作代码 数组方法总汇
Jan 27 Javascript
轻量级的原生js日历插件calendar.js使用指南
Apr 28 Javascript
javascript使用avalon绑定实现checkbox全选
May 06 Javascript
jquery实现简单的表单验证
Nov 17 Javascript
Bootstrap实现下拉菜单效果
Apr 29 Javascript
详解vuejs之v-for列表渲染
Jun 22 Javascript
JavaScript中EventLoop介绍
Jan 22 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
Apr 28 Javascript
微信小程序canvas绘制圆角base64图片的实现
Aug 18 Javascript
基于iview-admin实现动态路由的示例代码
Oct 02 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递归法读取目录及文件的方法
2015/01/30 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
js 浏览器事件介绍
2012/03/30 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
jQuery复合事件用法示例
2017/06/10 jQuery
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
初学Python实用技巧两则
2014/08/29 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python性能提升之延迟初始化
2016/12/04 Python
python实现上传下载文件功能
2020/11/19 Python
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
python实现一个猜拳游戏
2020/04/05 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
thinkphp5 路由分发原理
2021/03/18 PHP
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
大型活动策划方案
2014/01/12 职场文书
阳光体育活动方案
2014/02/16 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
个人贷款担保书
2014/04/01 职场文书
鉴定评语大全
2014/05/05 职场文书
养成教育经验材料
2014/05/26 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
党小组推荐意见
2015/06/02 职场文书
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
代码复现python目标检测yolo3详解预测
2022/05/06 Python