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中双叹号!!作用示例介绍
Sep 21 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
Nov 10 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
domReady的实现案例
Nov 23 Javascript
Bootstrap风格的WPF样式
Dec 07 Javascript
JS实现在文本指定位置插入内容的简单示例
Dec 22 Javascript
JavaScript中的事件与异常捕获详析
Feb 24 Javascript
javascript实现抢购倒计时程序
Aug 26 Javascript
解决在Vue中使用axios用form表单出现的问题
Oct 30 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
May 29 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php调整服务器时间的方法
2015/04/03 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
php封装的验证码类分享
2017/02/26 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
Js注册协议倒计时的小例子
2013/06/24 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
分分钟入门python语言
2018/03/20 Python
基于virtualenv创建python虚拟环境过程图解
2020/03/30 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
Python爬虫教程知识点总结
2020/10/19 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
电子商务专业个人的自我评价
2013/12/19 职场文书
2014年幼儿园植树节活动方案
2014/03/02 职场文书
年底个人总结范文
2015/03/10 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript