🌲 事件监听
我们可以使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click="handler" 或 @click="handler"。
事件处理器 (handler) 的值可以是:
- 内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与 onclick 类似)。
- 方法事件处理器:一个指向组件上定义的方法的属性名或是路径。
🌾 内联事件处理器
内联事件处理器通常用于简单场景,例如:
<template>
<h2 style="color:red;font-weight: bold;">你当前调戏了我{{ count }}次</h2>
<button @click="count++">点击调戏她吧</button>
</template>
<script setup>
import {ref} from 'vue'
const count = ref(1)
</script>
🌾 方法事件处理
随着事件处理器的逻辑变得愈发复杂,内联代码方式变得不够灵活。因此 v-on 也可以接受一个方法名或对某个方法的调用。
举例来说:
<template>
<button @click="greet">来吧,展示</button>
</template>
<script setup>
import {ref} from 'vue'
const name = ref('Vue.js')
function greet(event) {
alert(`Hello ${name.value}!`)
// `event` 是 DOM 原生事件
if (event) {
alert(event.target.tagName)
}
}
</script>
方法事件处理器会自动接收原生 DOM 事件并触发执行。在上面的例子中,我们能够通过被触发事件的 event.target.tagName 访问到该 DOM 元素。
🌾 在内联处理器中调用方法
除了直接绑定方法名,你还可以在内联事件处理器中调用方法。这允许我们向方法传入自定义参数以代替原生事件:
<template>
<button @click="say('hello')">Say hello</button>
<button @click="say('bye')">Say bye</button>
</template>
<script setup>
function say(message) {
alert(message)
}
</script>
🌾 在内联事件处理器中访问事件参数
有时我们需要在内联事件处理器中访问原生 DOM 事件。你可以向该处理器方法传入一个特殊的 $event 变量,或者使用内联箭头函数:
<template>
<!-- 使用特殊的 $event 变量 -->
<button @click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
<!-- 使用内联箭头函数 -->
<button @click="(event) => warn('Form cannot be submitted yet.', event)">
Submit
</button>
</template>
<script setup>
function warn(message, event) {
// 这里可以访问原生事件
if (event) {
console.log(event)
//preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交)。
event.preventDefault();
}
alert(message)
}
</script>
🌾 按键修饰符
在监听键盘事件时,我们经常需要检查特定的按键。Vue 允许在 v-on 或 @ 监听按键事件时添加按键修饰符。
<template>
<form method="post" action="/show">
<!-- 仅在 `key` 为 `Enter` 时调用 `submit` -->
<input @keyup.enter="submit" value="提交表单" />
</form>
</template>
<script setup>
</script>
你可以直接使用 KeyboardEvent.key 暴露的按键名称作为修饰符,但需要转为 kebab-case 形式。
🌾 按键别名
Vue 为一些常用的按键提供了别名:
- .enter
- .tab
- .delete (捕获“Delete”和“Backspace”两个按键)
- .esc
- .space
- .up
- .down
- .left
- .right
<template>
<!-- 仅在 `key` 为 `space` 时调用 `submit` -->
<input @keyup.space="show($event)" value="提交表单" />
</template>
<script setup>
function show(event){
alert("O(∩_∩)O哈哈")
}
</script>
🌾 系统按键修饰符
你可以使用以下系统按键修饰符来触发鼠标或键盘事件监听器,只有当按键被按下时才会触发。
- .ctrl
- .alt
- .shift
- .meta (home键)
<template>
<!-- Alt + Enter -->
<input @keyup.alt.enter="show" />
<!-- Ctrl + 点击 -->
<div @click.ctrl="show">Do something</div>
</template>
<script setup>
function show(){
alert("O(∩_∩)O哈哈")
}
</script>
🌾 鼠标按键修饰符
- .left
- .right
这些修饰符将处理程序限定为由特定鼠标按键触发的事件。
<template>
<input @click.right="show" />
<div @click.left="show">Do something</div>
</template>
<script setup>
function show(){
alert("O(∩_∩)O哈哈")
}
</script>
----------------------------------------------------------------------
分享不易,耗时耗力,喜欢的同学给个关注和赞吧
承接毕设指导,技术答疑,学习路上想要找私人教练的同学可以私信我
更多学习资料,公众号:墨轩学习网,B站:墨轩大楼
----------------------------------------------------------------------