1. v-on(简写@)侦听DOM事件,vue自定义事件
2. 事件处理器类型
1)内联事件处理器,实现简单逻辑
2)方法事件处理器,实现复杂逻辑
// 方法定义
const name = ref('Vue.js')
function greet(event) {
alert(`Hello ${name.value}!`)
// `event` 是 DOM 原生事件
if (event) {
alert(event.target.tagName)
}
}
<!-- `greet` 是上面定义过的方法名 -->
<button @click="greet">Greet</button>
3. 参数传递问题
1)如上greet方法事件处理器,默认传入事件event
2)在内联语句中调用方法,可以传入自定义参数
function say(message) {
alert(message)
}
<button @click="say('hello')">Say hello</button>
3)在内敛语句中使用特殊变量$event, 箭头函数
<!-- 使用特殊的 $event 变量 -->
<button @click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
<!-- 使用内联箭头函数 -->
<button @click="(event) => warn('Form cannot be submitted yet.', event)">
Submit
</button>
4. 事件修饰符
多类事件修饰符
1)基于DOM事件event本身的一些逻辑
<!-- 单击事件将停止传递 event.stopPropagation() -->
<a @click.stop="doThis"></a>
<!-- 提交事件将不再重新加载页面 event.preventDefault() -->
<form @submit.prevent="onSubmit"></form>
<!-- 修饰语可以使用链式书写 -->
<a @click.stop.prevent="doThat"></a>
<!-- 也可以只有修饰符 -->
<form @submit.prevent></form>
<!-- 仅当 event.target 是元素本身时才会触发事件处理器 -->
<!-- 例如:事件处理器不来自子元素 -->
<div @click.self="doThat">...</div>
<!-- 注意链式修饰符的向后顺序 -->
@click.prevent.self 会阻止元素及其子元素的所有点击事件的默认行为,而 @click.self.prevent 则只会阻止对元素本身的点击事件的默认行为。
2)基于原生 addEventListener 事件相对应
<!-- 添加事件监听器时,使用 `capture` 捕获模式 -->
<!-- 例如:指向内部元素的事件,在被内部元素处理前,先被外部处理 -->
<div @click.capture="doThis">...</div>
<!-- 点击事件最多被触发一次 -->
<a @click.once="doThis"></a>
<!-- 滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成 -->
<!-- 以防其中包含 `event.preventDefault()` -->
<div @scroll.passive="onScroll">...</div>
5. 键盘键修饰符/常用按键别名
<!-- 仅在 key 为 `Enter` 时调用 `submit` -->
<input @keyup.enter="submit" />
<!-- 仅在 key 为 'PageDown' 时调用, 特别注意转为 kebab-case -->
<input @keyup.page-down="onPageDown" />
按键别名如下
// 常用按键
.enter
.tab
.delete (捕获“Delete”和“Backspace”两个按键)
.esc
.space
.up
.down
.left
.right
// 系统按键
.ctrl
.alt
.shift
.meta
组合按键
<!-- Alt + Enter -->
<input @keyup.alt.enter="clear" />
<!-- Ctrl + 点击 -->
<div @click.ctrl="doSomething">Do something</div>
.exact 修饰符
<!-- 当按下 Ctrl 时,即使同时按下 Alt 或 Shift 也会触发 -->
<button @click.ctrl="onClick">A</button>
<!-- 仅当按下 Ctrl 且未按任何其他键时才会触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button>
<!-- 仅当没有按下任何系统按键时触发 -->
<button @click.exact="onClick">A</button>
6. 鼠标按键修饰符
这些修饰符将处理程序限定为由特定鼠标按键触发的事件。
.left
.right
.middle