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 相关文章推荐
JScript 脚本实现文件下载 一般用于下载木马
Oct 29 Javascript
网页打开自动最大化的js代码
Aug 22 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
浅谈JavaScript之事件绑定
Jul 08 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
Vue.js 2.0中select级联下拉框实例
Mar 06 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
浅谈React的最大亮点之虚拟DOM
May 29 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
javascript实现简单打字游戏
Oct 29 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
Aug 05 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP 强制下载文件代码
2010/10/24 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
jQuery学习笔记 操作jQuery对象 CSS处理
2012/09/19 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
vue.js系列中的vue-fontawesome使用
2018/02/10 Javascript
vue.js中created方法作用
2018/03/30 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Django的session中对于用户验证的支持
2015/07/23 Python
通过Python来使用七牛云存储的方法详解
2015/08/07 Python
Python执行时间的计算方法小结
2017/03/17 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
利用python求积分的实例
2019/07/03 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
财务副总经理工作职责
2013/11/25 职场文书
俄罗斯商务邀请函
2014/01/26 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
2014年党务工作总结
2014/11/25 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
财务经理岗位职责
2015/01/31 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
Golang 对es的操作实例
2022/04/20 Golang