当前位置:首页 > 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 实现按钮刷新功能 在 Vue 中实现按钮刷新功能可以通过多种方式实现,具体取决于刷新需求是局部刷新还是全局刷新。以下是几种常见的方法: 使用 window.location.reload()…

vue实现导航切换内容

vue实现导航切换内容

Vue实现导航切换内容的方法 在Vue中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容切…

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue实现 toast

vue实现 toast

Vue 实现 Toast 组件 在 Vue 中实现 Toast 组件可以通过多种方式完成,以下是几种常见的方法: 使用全局组件和事件总线 创建一个全局的 Toast 组件,并通过事件总线或 Vue…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…