You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过EventBus在Vue子组件间传递v-model绑定的数据

没问题,我来帮你搞定这个Vue子组件间用EventBus传值的事儿!你已经在main.js里搭好EventBus的基础架子了,接下来只需要在发送数据的组件里触发事件,在接收数据的组件里监听事件就行,具体实现步骤如下:

1. 完善第一个子组件(发送数据端)

你只需要给submit方法加上EventBus的触发逻辑,把v-model绑定的message传递出去就行:

<template>
  <div>
    <input type="text" v-model="message" />
    <button type="button" @click="submit">Submit</button>
  </div>
</template>

<script>
import { Bus } from './../main.js';

export default {
  data() {
    return {
      message: '' // 初始化v-model绑定的数据
    }
  },
  methods: {
    submit() {
      // 通过EventBus触发自定义事件,携带message数据
      // 这里的`message-updated`是自定义事件名,你可以按需修改,只要和接收端一致就行
      Bus.$emit('message-updated', this.message);
      
      // 可选:提交后清空输入框,提升用户体验
      this.message = '';
    }
  }
}
</script>

2. 接收数据的第二个子组件

在这个组件里,我们需要在生命周期钩子中监听EventBus的事件,拿到传递过来的数据,同时要记得在组件销毁时移除监听,避免内存泄漏:

<template>
  <div>
    <p>从其他组件收到的消息:{{ receivedMessage }}</p>
  </div>
</template>

<script>
import { Bus } from './../main.js';

export default {
  data() {
    return {
      receivedMessage: ''
    }
  },
  created() {
    // 监听EventBus上的`message-updated`事件,接收传递过来的数据
    this.busListener = Bus.$on('message-updated', (msg) => {
      this.receivedMessage = msg;
    });
  },
  beforeDestroy() {
    // 组件销毁前移除监听,防止内存泄漏
    Bus.$off('message-updated', this.busListener);
  }
}
</script>

关键注意点

  • 事件名要完全一致:发送端的$emit事件名和接收端的$on事件名必须一模一样,不然接收不到数据
  • 记得移除监听:如果不执行$off,组件销毁后监听仍会存在,可能导致重复触发或内存浪费
  • 这个方案适用于Vue2,如果你用的是Vue3,EventBus的实现方式会略有不同(推荐用mitt库代替)

内容的提问来源于stack exchange,提问作者kabugh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:50:39