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 相关文章推荐
用JavaScript实现仿Windows关机效果
Mar 10 Javascript
MooTools 1.2介绍
Sep 14 Javascript
关于javascript event flow 的一个bug详解
Sep 17 Javascript
框架页面高度自动刷新的Javascript脚本
Nov 01 Javascript
jquery实现pager控件示例
Apr 09 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
JS继承之借用构造函数继承和组合继承
Sep 07 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 Javascript
基于vue展开收起动画的示例代码
Jul 05 Javascript
javascript获取select值的方法完整实例
Jun 20 Javascript
js实现简易计算器功能
Oct 18 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 JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
文本框回车提交与禁止提交示例
2013/09/27 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
10分钟上手vue-cli 3.0 入门介绍
2018/04/04 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
c++生成dll使用python调用dll的方法
2014/01/20 Python
横向对比分析Python解析XML的四种方式
2016/03/30 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
PyQt实现计数器的方法示例
2021/01/18 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
美国眼镜网站:LensCrafters
2020/01/19 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
大学竞选班长演讲稿
2014/04/24 职场文书
派出所所长先进事迹
2014/05/19 职场文书
医院我们的节日活动实施方案
2014/08/22 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python