当前位置:首页 > 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 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @whe…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…