当前位置:首页 > VUE

vue on 和 emit实现

2026-01-22 00:09:39VUE

Vue 中的 $on$emit 实现

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

基本用法

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

vue on 和 emit实现

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

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

父子组件通信

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

vue on 和 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);
});

移除事件监听

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

// 添加监听
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中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现mvc

vue实现mvc

Vue 实现 MVC 模式 Vue 本身是一个 MVVM(Model-View-ViewModel)框架,但可以通过结构调整实现 MVC(Model-View-Controller)模式。以下是具体实…

vue 实现豆瓣

vue 实现豆瓣

以下是基于 Vue 实现豆瓣电影类功能的实现方案,涵盖核心模块和技术要点: 数据获取与 API 调用 使用豆瓣开放 API(需注意调用频率限制)或第三方代理接口 推荐 axios 进行异步请求,配合…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.de…