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 写类方式之十
Jul 05 Javascript
JS target与currentTarget区别说明
Aug 28 Javascript
jQuery随便控制任意div隐藏的方法
Jun 28 Javascript
javascript:文字不间断向左移动的实例代码
Aug 08 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
详解JavaScript中Date.UTC()方法的使用
Jun 12 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
Nov 26 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
php实现的验证码文件类实例
2015/06/18 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
loading动画特效小结
2017/01/22 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
使用python实现生成用户信息
2017/03/20 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python实现kMeans算法
2017/12/21 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
基于Python log 的正确打开方式
2018/04/28 Python
基于python实现计算两组数据P值
2020/07/10 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
nohup的用法
2012/11/26 面试题
大专应届生个人的自我评价
2013/11/21 职场文书
团员个人的自我评价
2013/12/02 职场文书
比较几种Redis集群方案
2021/06/21 Redis
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
python脚本框架webpy模板控制结构
2021/11/20 Python
nginx rewrite功能使用场景分析
2022/05/30 Servers