v-on的修饰符

235 阅读2分钟

一、事件修饰符

1、.stop

阻止事件冒泡

<div @click="firstClick">
  按钮1
  <button @click.stop="lastClick">按钮2</button>
</div>
firstClick() {
  console.log("firstbtn");
},
lastClick() {
  console.log("lastbtn");
},

若没有加.stop,则在点击按钮2时控制台会输出firstbtn和lastbtn,加上.stop可以解决这个问题。

2、.prevent

阻止默认事件,例如:当提交表单的时候,页面会自动刷新,在加上.prevent可以阻止。

<form @submit.prevent="submitClick">
  <button type="submit" value="提交">按钮3</button>
</form>

注意:prevent加在form上

submitClick() {
  console.log("submitbtn");
},

3、.capture

在捕获的过程监听,没有capture修饰词都是默认冒泡过程监听的。默认的冒泡过程是从里到外执行事件,若有capture则先冒泡带有关键字的事件,然后再从里向外执行。

<div @click="firstClick">
  <div @click.capture="secondClick">
    <div @click="lastClick">点这</div>
  </div>
</div>
firstClick() {
  console.log("firstbtn");
},
secondClick() {
  console.log("secondbtn");
},
lastClick() {
  console.log("lastbtn");
},

默认输出顺序 加上capture后的顺序

4、self

.self只执行直接作用于该元素身上的事件,忽略了其他元素的冒泡或者捕获事件。

<div @click="firstClick">1
  <div @click.self="secondClick">2
    <div @click="lastClick">点这</div>
  </div>
</div>
firstClick() {
  console.log("firstbtn");
},
secondClick() {
  console.log("secondbtn");
},
lastClick() {
  console.log("lastbtn");
},

当点击的时候,控制台只输出

lastbtn
firstbtn

因为secondbtn上加了.self,跟.stop阻止冒泡事件的情况差不多,但不同的是当点击lastbtn时.stop是将冒泡事件停止于自身,而.self是让冒泡事件跳过自身继续执行。
而当点击secondbtn时,控制台输出为

secondbtn
firstbtn

这是因为.self只执行直接作用于自身的事件,然后冒泡事件继续,忽略了其他元素的冒泡或者捕获事件。

5、.once

只触发一次回调
例如:有一个按钮,不管按多少次,也只有第一次按会触发回调,后面的不会再触发。

6、.passive

.passive可以提前告诉浏览器可以不用去查询程序有没有阻止默认事件。这一般用在滚动监听,因为滚动监听过程中,移动每个像素都会产生一次事件,每次都使用内核线程查询prevent会使滑动卡顿。通过passive将内核线程查询跳过,可以大大提升滑动的流畅度。

二、按键修饰符

监听键盘事件

<input type="text" @keyup.enter="submitClick">

只有当按下回车时才会触发事件。