当前位置:首页 > VUE

vue事件如何实现

2026-01-19 01:01:37VUE

Vue 事件实现方法

Vue 中事件通过 v-on 指令或 @ 简写实现,支持原生 DOM 事件和自定义事件。

原生 DOM 事件绑定

<button v-on:click="handleClick">点击触发</button>
<!-- 简写形式 -->
<button @click="handleClick">简写点击</button>

方法定义

在 Vue 实例的 methods 中定义事件处理函数:

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

事件修饰符

Vue 提供事件修饰符实现常见功能:

  • .stop:阻止事件冒泡
  • .prevent:阻止默认行为
  • .capture:使用捕获模式
  • .self:仅当事件从元素本身触发时执行
  • .once:事件只触发一次
  • .passive:提升滚动性能
<form @submit.prevent="onSubmit">
  <button @click.stop="doThis">阻止冒泡</button>
</form>

自定义事件

子组件通过 $emit 触发事件,父组件通过 v-on 监听:

// 子组件
this.$emit('custom-event', payload);

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

事件总线(跨组件通信)

创建全局事件总线:

// main.js
Vue.prototype.$eventBus = new Vue();

// 组件A发送事件
this.$eventBus.$emit('global-event', data);

// 组件B监听事件
this.$eventBus.$on('global-event', data => {
  console.log('接收数据', data);
});

按键修饰符

监听特定按键事件:

<input @keyup.enter="submit" />
<input @keyup.13="submit" /> <!-- 键码方式 -->

系统修饰键

组合键监听:

<button @click.ctrl.exact="onCtrlClick">仅按Ctrl时触发</button>

事件传参

传递额外参数给处理函数:

vue事件如何实现

<button @click="handleClick($event, 'param')">带参数事件</button>

注意事项

  1. 事件处理函数默认接收原生 DOM 事件对象作为第一个参数
  2. 使用 $emit 触发自定义事件时,第二个参数开始为传递的数据
  3. 组件销毁前应移除全局事件监听,避免内存泄漏
  4. .sync 修饰符(Vue 2.x)已由 v-model 参数(Vue 3)替代

分享给朋友:

相关文章

vue中如何实现循环

vue中如何实现循环

循环渲染列表数据 在Vue中,使用v-for指令实现循环渲染。基本语法为v-for="(item, index) in items",其中items是数据源数组,item是当前遍历的元素,index是…

vue如何实现单选

vue如何实现单选

使用原生 HTML 单选按钮 在 Vue 中可以直接使用 HTML 的原生单选按钮,通过 v-model 绑定数据。 <template> <div> <…

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用自…

vue 如何实现返回

vue 如何实现返回

Vue 实现返回功能的方法 使用 router.go(-1) 在 Vue 中可以通过 Vue Router 的 go 方法实现返回上一页的功能。在需要触发返回的按钮或方法中调用 this.$route…

vue如何实现筛选

vue如何实现筛选

在Vue中实现筛选功能 Vue提供了多种方式实现数据筛选,可以根据需求选择合适的方法。以下是几种常见的实现方式: 使用计算属性实现筛选 计算属性是Vue中实现筛选功能的推荐方式,它会自动缓存结果,…

vue如何实现跳转

vue如何实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转可以通过以下几种方式,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router 提供的组…