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代码
Dec 26 Javascript
js 验证密码强弱的小例子
Mar 21 Javascript
js+css实现文字散开重组动画特效代码分享
Aug 21 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
JavaScript获取客户端IP的方法(新方法)
Mar 11 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 Javascript
jQuery实现给input绑定回车事件的方法
Feb 09 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
Apr 26 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 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
杏林同学录(九)
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
深入密码加salt原理的分析
2013/06/06 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
2011/10/12 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
python 对xml解析的示例
2021/02/27 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
中标通知书
2015/04/17 职场文书
鲁冰花观后感
2015/06/10 职场文书
学生会主席任命书
2015/09/21 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python