当前位置:首页 > 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 实现答题功能 数据结构设计 使用 Vue 的响应式特性管理题目和答案数据。通常需要以下数据结构: data() { return { questions: [ {…

vue实现mvvm

vue实现mvvm

Vue 实现 MVVM 模式 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 是其典型实现之一。MVVM 的核心是通过数据绑定和响应式系统实现视图与数据的自动同步。…

vue实现 弹窗

vue实现 弹窗

Vue 实现弹窗的基本方法 使用 Vue 实现弹窗可以通过多种方式,包括组件化、指令、插件等。以下是几种常见的实现方法。 组件化实现弹窗 创建一个独立的弹窗组件,通过 props 控制显示与隐藏。…

vue实现计数

vue实现计数

Vue 实现计数功能 在 Vue 中实现计数功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue 数据绑定和事件监听 通过 Vue 的数据绑定和事件监听,可以轻松实现计数功能。以下是一个简…

vue实现登录认证

vue实现登录认证

Vue 登录认证实现方法 使用 Vue Router 和 Vuex 管理登录状态 在 Vue 项目中,通常使用 Vue Router 进行路由管理,Vuex 进行状态管理。登录认证的核心是验证用户身份…

vue实现回顶部

vue实现回顶部

实现方法一:使用 window.scrollTo 在Vue组件中,可以通过调用 window.scrollTo 方法平滑滚动到页面顶部。该方法接受一个配置对象,指定滚动行为为平滑(smooth)。…