当前位置:首页 > VUE

vue on 和 emit实现

2026-02-22 15:14:03VUE

Vue 中 $on$emit 的实现

$on$emit 是 Vue 中用于实现自定义事件的核心方法,常用于父子组件或兄弟组件间的通信。以下是具体实现方式:

使用 $emit 触发事件

在发送事件的组件中调用 $emit,传递事件名称和可选数据:

// 子组件或触发事件的组件
this.$emit('event-name', data);

使用 $on 监听事件

在接收事件的组件中调用 $on,监听事件并处理数据:

vue on 和 emit实现

// 父组件或监听事件的组件
this.$on('event-name', (data) => {
  console.log('Received data:', data);
});

父子组件通信示例

子组件 (ChildComponent.vue)
通过按钮点击触发事件:

<template>
  <button @click="sendData">Send Data</button>
</template>

<script>
export default {
  methods: {
    sendData() {
      this.$emit('data-sent', { message: 'Hello from child!' });
    }
  }
}
</script>

父组件 (ParentComponent.vue)
监听子组件事件并接收数据:

vue on 和 emit实现

<template>
  <child-component @data-sent="handleData"></child-component>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: { ChildComponent },
  methods: {
    handleData(data) {
      console.log(data.message); // 输出: "Hello from child!"
    }
  }
}
</script>

非父子组件通信

通过创建一个空的 Vue 实例作为事件总线(Event Bus):

// event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();

组件 A (触发事件)

import { EventBus } from './event-bus.js';
EventBus.$emit('global-event', { payload: 'Data' });

组件 B (监听事件)

import { EventBus } from './event-bus.js';
EventBus.$on('global-event', (data) => {
  console.log(data.payload); // 输出: "Data"
});

注意事项

  • 移除监听器:避免内存泄漏,在组件销毁前使用 $off 移除监听:
    EventBus.$off('global-event');
  • 作用域$on$emit 必须在同一 Vue 实例或事件总线上调用。
  • 替代方案:复杂场景建议使用 Vuex 或 Provide/Inject。

通过 $on$emit 可以灵活实现组件间的松耦合通信。

标签: vueon
分享给朋友:

相关文章

vue实现滑块

vue实现滑块

Vue 实现滑块组件的方法 使用原生 HTML 和 Vue 指令 通过 Vue 的 v-model 和事件监听实现基础滑块功能。创建一个包含 input 元素的组件,类型设置为 range,并绑定到…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…

vue实现openoffice

vue实现openoffice

Vue 中集成 OpenOffice 的实现方法 在 Vue 项目中集成 OpenOffice 通常需要通过后端服务或现有库实现文档的预览和编辑功能。以下是几种常见的实现方式: 使用 OnlyOff…