当前位置:首页 > VUE

vue on 和 emit实现

2026-01-22 00:09:39VUE

Vue 中的 $on$emit 实现

$on$emit 是 Vue 中用于实现事件监听和触发的核心方法,常用于组件间的通信。

基本用法

$emit 用于触发事件,$on 用于监听事件:

// 触发事件
this.$emit('event-name', eventData);

// 监听事件
this.$on('event-name', (eventData) => {
  console.log('事件触发:', eventData);
});

父子组件通信

在父子组件中,$emit 通常用于子组件向父组件传递数据:

// 子组件
methods: {
  handleClick() {
    this.$emit('custom-event', { data: '子组件数据' });
  }
}

// 父组件模板
<child-component @custom-event="handleCustomEvent"></child-component>

// 父组件方法
methods: {
  handleCustomEvent(payload) {
    console.log('接收到子组件数据:', payload.data);
  }
}

非父子组件通信

对于非父子关系的组件,可以通过一个空的 Vue 实例作为事件总线:

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

// 组件A - 触发事件
EventBus.$emit('global-event', { message: '全局事件' });

// 组件B - 监听事件
EventBus.$on('global-event', (payload) => {
  console.log('接收到全局事件:', payload.message);
});

移除事件监听

为避免内存泄漏,需要及时移除监听:

vue on 和 emit实现

// 添加监听
const handler = (data) => console.log(data);
this.$on('event', handler);

// 移除监听
this.$off('event', handler);

// 移除所有监听
this.$off('event');

注意事项

  • 事件名建议使用 kebab-case 命名(如 my-event),避免与 HTML 属性冲突。
  • 在组件销毁前(beforeDestroy 钩子)移除所有自定义事件监听。
  • 对于复杂应用,建议使用 Vuex 替代事件总线模式。

标签: vueon
分享给朋友:

相关文章

vue实现画圆弧并着色

vue实现画圆弧并着色

在 Vue 中实现画圆弧并着色 使用 Canvas API 绘制圆弧 在 Vue 组件的 mounted 钩子中,通过 Canvas API 绘制圆弧。创建一个 canvas 元素并获取其上下文:…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue实现toggle

vue实现toggle

Vue 实现 Toggle 功能 在 Vue 中实现 toggle(切换)功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 和 v-on 通过 v-model 绑定数据,结合…

vue实现选择

vue实现选择

Vue 实现选择功能的方法 在 Vue 中实现选择功能可以通过多种方式完成,以下介绍几种常见的实现方法。 使用 v-model 绑定单选 通过 v-model 可以轻松实现单选功能。以下是一个简单的…

vue实现github

vue实现github

Vue 实现 GitHub 相关功能 创建 GitHub API 请求 在 Vue 项目中,可以使用 axios 或 fetch 与 GitHub API 进行交互。需要在 GitHub 上创建个人访…

vue实现回复

vue实现回复

Vue 实现回复功能 在 Vue 中实现回复功能通常涉及前端表单交互、数据绑定和后端通信。以下是实现回复功能的详细步骤: 数据绑定与表单设计 使用 Vue 的 v-model 绑定回复框的输入内容,…