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 相关文章推荐
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
Jun 27 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
Vue前端开发规范整理(推荐)
Apr 23 Javascript
vue里如何主动销毁keep-alive缓存的组件
Mar 21 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
富文本编辑器vue2-editor实现全屏功能
May 26 Javascript
react如何快速设置文件路径别名
Apr 28 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中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
Jquery数独游戏解析(一)-页面布局
2010/11/05 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
javascript回到顶部特效
2016/07/30 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
初探js和简单隐藏效果的实例
2017/11/23 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现CET查分的方法
2015/03/10 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
Kathmandu新西兰官网:新西兰户外运动品牌
2019/07/27 全球购物
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
机械绘图员岗位职责
2013/11/19 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书