当前位置: 首页 > news >正文

前端基础之《Vue(15)—组件通信(2)》

接上一篇。

八、事件总线例子

1、什么是事件总线
const bus = new Vue(),不给选项就是事件总线,给选项就是组件了。

事件总线函数:
(1)bus.$on('频道', callback):监听一个“频道”
(2)bus.$emit('频道', '消息'):向指定“频道”上发送消息
(3)bus.$off():取消订阅“频道”
(4)bus.$once():对某个“频道”只监听一次

2、什么是“订阅-发布”模式
这里的事件总线,就是一种“订阅-发布”模式。
在Vue的背后源码中的Dep类也是一种“订阅-发布”模式。
“订阅-发布”模式,也叫做“观察者模式”。

3、代码

<html>
<head><title>组件通信-事件总线</title><style>.row {line-height: 22px;}</style>
</head>
<body><div id="app"><comp-teacher></comp-teacher><hr><comp-student></comp-student></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script><script>const bus = new Vue() // 事件总线(事件系统)Vue.component('comp-teacher', {template: `<div><h2>老师在线</h2><input type="text" v-model='msg' @keyup.enter='send' /><button @click='send'>发送消息</button><div v-html='content'></div></div>`,data() {return {msg: '',content: ''}},methods: {send() {// 使用事件总线向qqq频道上发送消息bus.$emit('qqq', this.msg)this.msg = ''}},mounted() {bus.$on('stu', msg=>{this.content += `<div class='row'>学生说:${msg}</div>`})}})Vue.component('comp-student', {template: `<div><h2>学生在线</h2><input type="text" v-model='msg' @keyup.enter='send' /><button @click='send'>发送消息</button><div v-html='content'></div></div>`,data() {return {msg: '',content: ''}},methods: {send() {// 学生发消息bus.$emit('stu', this.msg)this.msg = ''}},mounted() {// 使用事件总线,监听qqq这个频道bus.$on('qqq', msg=>{console.log('student---qqq频道上有消息来了', msg)this.content += `<div class='row'>老师说:${msg}</div>`})}})const app = new Vue({})app.$mount('#app')</script></body>
</html>

相关文章:

  • 【漫话机器学习系列】247.当 N=整个母体(WHEN N=POPULATION)
  • vue2 两种路由跳转方式
  • 网络化:DevOps 工程的必要基础(Networking: The Essential Foundation for DevOps Engineering)
  • 信息学奥赛一本通 1511:【SCOI2011】糖果 | 洛谷 P3275 [SCOI2011] 糖果
  • 单片机嵌入式滤波算法库
  • 3.2.3 掌握RDD转换算子 - 5. 合并算子 - union()
  • 人工智能可信度新突破:MIT改进共形分类助力高风险医学诊断
  • AI领域的MCP(Model-Centric Paradigm)
  • vue 中如何使用region?
  • 一、Redis快速入门
  • 《社交应用架构生存战:React Native与Flutter的部署容灾决胜法则》
  • 关于Bearer Token
  • IBM BAW(原BPM升级版)使用教程第五讲
  • k8s术语之Horizontal Pod Autoscaling
  • PlatformIO
  • RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理
  • 结合Splash与Scrapy:高效爬取动态JavaScript网站
  • k8s术语之job
  • 使用mermaidchart 显示graph LR
  • OCCT中的布尔运算
  • 美英达成贸易协议,美股集体收涨
  • 特色业务多点开花,苏州银行擦亮金融为民底色
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • 男子煎服15克山豆根中毒送医,医生:不能盲目相信偏方
  • 央行:今日起下调再贷款利率0.25个百分点