Vue全局事件总线你了解吗
全局事件总线,是组件间的一种通信方式,适用于任何组件间通信。
看下面具体的例子。
父组件:App
<template> <div class="app"> <Company/> <Employee/> </div> </template> <script> import Company from "./components/Company.vue"; import Employee from "./components/Employee.vue"; export default { components:{ Company, Employee } } </script> <style> .app{ background: gray; padding: 5px; } .btn{ margin-left:10px; line-height: 30px; background: ivory; border-radius: 5px; } </style>
子组件:Company和Employee
<template> <div class="company"> <h2>公司名称:{{name}}</h2> <h2>公司地址:{{address}}</h2> <button @click="sendMessage">点我发送</button> </div> </template> <script> export default { name:"Company", data(){ return { name:"五哈技术有限公司", address:"上海宝山" } }, methods:{ sendMessage(){ console.log("Company组件发送数据:",this.name); this.$bus.$emit("demo",this.name); } } } </script> <style scoped> .company{ background: orange; background-clip: content-box; padding: 10px; } </style>
<template> <div class="employee"> <h2>员工姓名:{{name}}</h2> <h2>员工年龄:{{age}}</h2> </div> </template> <script> export default { name:"Employee", data(){ return { name:"张三", age:25 } }, mounted(){ this.$bus.$on("demo",(data) => { console.log("Employee组件监听demo,接收数据:",data); }) }, beforeDestroy() { this.$bus.$off("demo"); } } </script> <style scoped> .employee{ background: skyblue; background-clip: content-box; padding: 10px; } </style>
入口文件:main.js
import Vue from 'vue'; import App from './App.vue'; Vue.config.productionTip = false; new Vue({ el:"#app", render: h => h(App), beforeCreate(){ Vue.prototype.$bus = this; } })
父组件App,子组件Company
和Employee
子组件Company和Employee之间通过全局数据总线进行数据传递。
在main.js中,定义了全局事件总线:$bus
。
$bus
定义在Vue.prototype
,因此$bus
对所有组件可见,即所有组件可通过this.$bus
访问。
$bus
被赋值为this
,即vm实例,因此$bus
拥有vm实例上的所有属性和方法,如$emit
、$on
、$off
等。
new Vue({ beforeCreate(){ Vue.prototype.$bus = this; } })
使用全局事件总线
$bus.$on
,监听事件。Employee组件中定义了监听事件,监听demo事件;
$bus.$emit
,触发事件。Company组件中定义了触发事件,点击按钮执行sendMessage回调,该回调将触发demo事件。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
相关文章
vue.js使用v-pre与v-html输出HTML操作示例
这篇文章主要介绍了vue.js使用v-pre与v-html输出HTML操作,结合实例形式分析了vue.js基于v-pre与v-html属性输出HTML的具体操作技巧,需要的朋友可以参考下2018-07-07移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
这篇文章主要介绍了移动端 Vue+Vant 的Uploader 实现 上传、压缩、旋转图片功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下2019-06-06vue.js2.0 实现better-scroll的滚动效果实例详解
better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写。better-scroll 也很强大,不仅可以做普通的滚动列表,还可以做轮播图、picker 等等,下面通过本文给大家介绍vue.js2.0 实现better-scroll的滚动效果,感兴趣的朋友一起看看吧2018-08-08完美解决vue引入BMapGL is not defined的问题
在Vue项目中使用BMapGL时,通过在src下添加bmp.js文件并配置密钥(ak),可以有效解决地图API的应用问题,本方法是基于个人经验总结,希望能为开发者提供参考和帮助2024-10-10
最新评论