🌗 Vue 事件处理
# 事件处理
# 绑定监听
绑定事件使用:
v-on:xxx=‘func’,可以简写为@xxx=‘func’或者@xxx=‘func($event)’,xxx是事件名;默认事件形参:
event;隐含属性对象:
$event;
事件的回调需要配置在
methods对象中,最终会在vm实例对象中(配置在data中会被错误地进行数据代理,浪费性能);在
methods中配置函数不能使用箭头函数(如前所述,this不再是vm而是window);在
method中配置的函数,都是被 Vue 管理的函数,this指向vm或者组件实例对象;
关于事件的传参:
@click=“demo”和@click=“demo($event)”的效果一致,但是后者可以传参。
# 事件修饰符
⭐️ .prevent 阻止事件的默认行为( event.preventDefault() );
🌰 例子:
<a href="https://www.atguigu.com" @click.prevent="showInfo">点我提示信息</a>
⭐️ .stop 停止事件冒泡( event.stopPropagation() );
🌰 例子:
<div class="demo1" @click="showInfo">
<button @click.stop="showInfo">点我提示信息</button>
</div>
2
3
⭐️ .once 事件只能触发一次:
🌰 例子:
<button @click.once="showInfo">点我提示信息</button>
.capture 事件的捕获模式:(不管事件的冒泡,只遵循设置的事件捕获的顺序)
🌰 例子:
<div class="box1" @click.capture="showMsg(1)">
div1
<div class="box2" @click="showMsg(2)">
div2
</div>
</div>
2
3
4
5
6
.passive 鼠标滚动滚轮 -> 触发 demo 事件 -> 完成后才进行下一步滚轮滚动:事件的默认行为立即执行,无需等待事件回调执行完毕;(多用于移动端)
🌰 例子:
<ul @wheel.passive="demo" class="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
2
3
4
5
6
⚠️ 事件修饰符可以连续写:(顺序不产生影响)
🌰 例子:
<a href="https://www.atguigu.com" @click.prevent.stop="showInfo">点我提示信息</a>
# 键盘事件
使用 @keyup=“xxx” 或者 @keydown=“xxx” 监听键盘事件;
使用按键别名监听特定的键盘按键,例如: @keyup.enter='xxx' ;
Vue 中提供的常用的按键别名:回车
enter、 删除delete(捕获「删除」和「退格」键)、 退出esc、空格space、 换行tab(特殊,必须配合keydown去使用)、上up、下down、 左left、 右right;(正确的按键名是大写开头,小写开头是按键别名)
Vue 未提供别名的按键,可以使用按键原始的 key 值去绑定,但注意要转为 kebab-case (短横线命名)(例如:对于切换大小写按键 Caps Lock 的别名为 caps-lock (极少使用));
系统修饰键(用法特殊):
ctrl、alt、shift、meta/cmd:配合
keyup使用时:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。配合
keydown使用时:正常触发事件。也可以使用 keyCode 去指定具体的按键(因不统一不推荐):
Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名;
# 按键修饰符
keycode:操作的是某个 keycode 值的键;keyName:操作的某个按键名的键(少);
