当前位置:首页 > 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 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm insta…

vue实现跑车

vue实现跑车

Vue 实现跑车动画效果 使用 Vue 结合 CSS 动画可以实现跑车在屏幕上移动的效果。以下是一个完整的实现方案: 创建 Vue 组件结构 <template> <div c…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue实现滑块

vue实现滑块

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