当前位置:首页 > VUE

vue实现事件监听

2026-01-16 01:31:54VUE

Vue 事件监听实现方法

Vue 提供了多种方式实现事件监听,涵盖组件内外交互、原生 DOM 事件处理等场景。以下是核心实现方案:

模板内直接监听

通过 v-on@ 语法监听 DOM 事件:

<button @click="handleClick">点击触发</button>

事件处理函数需定义在组件的 methods 中:

methods: {
  handleClick(event) {
    console.log('事件触发', event.target)
  }
}

自定义事件监听

子组件通过 $emit 触发事件:

this.$emit('custom-event', payload)

父组件通过 v-on 监听:

<child-component @custom-event="handleCustomEvent" />

事件修饰符

Vue 提供的事件修饰符可简化常见操作:

<!-- 阻止默认行为 -->
<form @submit.prevent="onSubmit"></form>

<!-- 停止事件冒泡 -->
<div @click.stop="doThis"></div>

<!-- 按键修饰符 -->
<input @keyup.enter="submit" />

生命周期钩子监听

在组件生命周期中添加/移除事件监听:

mounted() {
  window.addEventListener('resize', this.handleResize)
},
beforeDestroy() {
  window.removeEventListener('resize', this.handleResize)
}

事件总线模式

创建全局事件中心实现跨组件通信:

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()

// 组件A发送事件
EventBus.$emit('message', data)

// 组件B接收事件
EventBus.$on('message', data => {})

第三方库集成

使用 mitt 等轻量事件库:

import mitt from 'mitt'
const emitter = mitt()

// 发送事件
emitter.emit('foo', { a: 'b' })

// 接收事件
emitter.on('foo', e => console.log(e))

最佳实践建议

  • 组件销毁时需手动移除全局事件监听,避免内存泄漏
  • 复杂场景建议使用 Vuex 进行状态管理而非过度依赖事件总线
  • 自定义事件名推荐使用 kebab-case 命名(如 user-updated

vue实现事件监听

标签: 事件vue
分享给朋友:

相关文章

vue实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Card…

vue双向实现

vue双向实现

Vue 双向数据绑定的实现原理 Vue 的双向数据绑定主要通过 v-model 指令实现,其核心是结合了数据劫持(Object.defineProperty 或 Proxy)和发布-订阅模式。 数据…

vue如何实现放大缩小

vue如何实现放大缩小

Vue实现放大缩小功能的方法 在Vue中实现元素的放大缩小功能,可以通过CSS变换、第三方库或直接操作DOM样式来实现。以下是几种常见的方法: 使用CSS transform属性 通过绑定Vue的d…

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…