Vue基本指令 v-on

v-on是Vue指令中的事件指令,我们像DOM元素上绑定事件都是通过这个指令

<div v-on:click="func"></div>

v-on在编写时可以简写为@

<div @click="func"></div>

 Vue模板中,可以像函数中传递参数,没有参数时(如上)可以省略小括号,传递参数时直接在函数名后加小括号

<div @click="func(param1, param2)"></div>

事件对象参数

我们知道函数默认有一个事件对象参数,当没有传递参数时

<div @click="func"></div>
methods: {
  func(e) {
    console.log(e); // MouseEvent {isTrusted: true, screenX: 70, screenY: 114, clientX: 70, clientY: 11, …}
  },
},

添加一个形参,接收的就是事件对象

当有参数时,我们再打印事件对象

<div @click="func(param1, param2, $event)"></div>
methods: {
  func(param1, param2, $event) {
    console.log($event); // MouseEvent {isTrusted: true, screenX: 52, screenY: 114, clientX: 52, clientY: 11, …}
  },
},

需要再向函数中传入一个固定参数 $event,$event 必须是最后一个参数,否则也是接收不到的

事件修饰符

所有事件修饰符中的案例,共用此图

 .stop ===>>> 阻止事件冒泡

<div>
  <h3>第一层</h3>
  <div @click="func2">
    <h2>第二层</h2>
    <div @click="func"><h1>第三层</h1></div>
  </div>
</div>

像这样的嵌套的情况,我们在点击第三层时,会触发第二层和第三层 div 上绑定的事件函数,这种情况叫做事件冒泡,通过点击子级元素,父级元素事件函数通过事件冒泡被触发,此时点击第三层将触发 func、func2 两个事件函数。

<div>
  <h3>第一层</h3>
  <div @click="func2">
    <h2>第二层</h2>
    <div @click.stop="func"><h1>第三层</h1></div>
  </div>
</div>

使用 .stop 事件修饰符,当我们点击第三层时就会阻止事件冒泡,不会触发第二层事件函数

.capture ===>>> 使事件在捕获阶段触发

当事件函数被事件冒泡触发时,如果有 .capture 修饰符则该事件将以事件捕获的顺序执行

<div @click="func">
  <h3>第一层</h3>
  <div @click.capture="func2">
    <h2>第二层</h2>
    <div @click="func3"><h1>第三层</h1></div>
  </div>
</div>
methods: {
  func() {
    console.log("第一层");
  },
  func2() {
    console.log("第二层");
  },
  func3() {
    console.log("第三层");
  },
}

当我们点击第三层,此时打印结果为:

因为我们首先点击第三层,会产生事件冒泡,当事件冒泡到第二层事件函数(func2)时,因为 .capture 修饰符的关系,会从第二层开始时间捕获向下触发到最后一层的事件,之后继续事件冒泡

.prevent ===>>> 阻止默认事件的触发

这里我们以 a 标签举例,我们知道 a 标签 <a href=""></a> 在 href 为空串的情况下,点击页面会刷新,页面刷新是 a 标签的默认事件

<a href="" @click.prevent="aClick">点我</a>

当我们在 a 标签上使用了 .prevent 修饰符,在点击 a 标签时则不会触发默认事件 —— 页面刷新

.self ===>>> 使事件只能在绑定的 DOM 元素上触发,不能通过事件冒泡被触发

<div @click.capture="func">
  <h3>第一层</h3>
  <div @click.self="func2">
    <h2>第二层</h2>
    <div @click="func3"><h1>第三层</h1></div>
  </div>
</div>

此时点击第三层,会通过事件冒泡依次触发第二层和第一层的事件函数,如果第二层没有修饰符 .self 的限制的话,应该一次打印出“第一层”、“第三层”、“第二层”,而现在因为 .self 修饰符的影响,打印结果依次为“第一层”、“第三层”

.once ===>>> 拥有 .once 修饰符的事件为一次性事件

事件从渲染成功到执行一次后,便会销毁

按键修饰符

常用按键修饰符

.enter ===>>> 捕获“回车”键(Enter)

.tab ===>>> 捕获 Tab 键

.delete ===>>> 捕获“删除”(delete)和“退格”(Backspace)键

.esc ===>>> 捕获 Esc (escape) 键

.space ===>>> 捕获“空格”(space)键

.up ===>>> 捕获“上方向”键

.down ===>>> 捕获“下方向”键

.left ===>>> 捕获“左方向”键

.right ===>>> 捕获“右方向”键

系统按键修饰符

.ctrl ===>>> 捕获“控制”(control/ctrl)键

.alt ===>>> 捕获“改变”(alter/alt)键

.shift ===>>> 捕获“切换”(shift)键

.meta ===>>> 捕获 Win 键(window徽标键/开始键),在 Mac 电脑为 command 键

 

posted @ 2021-05-07 15:12  调用Function  阅读(551)  评论(0编辑  收藏  举报