监听事件
用v-on指令或简写@来监听DOM事件,并在事件触发时执行对应的JS
v-on:click="handler" 或 @click="handler"
这里的handler事件处理器的值可以是:
1.内联事件处理器:事件被触发时执行的内联JS语句(与onclick类似)
data() { return { count: 0 } } <button @click="count++">Add 1</button> <p>Count is: {{ count }}</p>
2.方法事件处理器:一个指向组件上定义的方法的属性名或是路径
data() { return { name: 'Vue.js' } }, methods: { greet(event) { // 方法中的 `this` 指向当前活跃的组件实例 alert(`Hello ${this.name}!`) // `event` 是 DOM 原生事件 if (event) { alert(event.target.tagName) } } } <!-- `greet` 是上面定义过的方法名 --> <button @click="greet">Greet</button>
方法事件处理器会自动接收原生DOM事件并触发执行,可以通过被触发事件的event.target.tagName访问到该DOM元素
在内联事件处理器中调用方法
即除了直接绑定方法名,也可以在内联处理器调用方法,这是可以向方法中传入自定义参数代替原生事件
methods: { say(message) { alert(message) } } <button @click="say('hello')">Say hello</button> <button @click="say('bye')">Say bye</button>
在内联处理器中访问事件参数
有时候需要在内联事件处理器中访问原生DOM事件,这时可以通过如下两种方式实现:
<!-- 使用特殊的 $event 变量 --> <button @click="warn('Form cannot be submitted yet.', $event)"> Submit </button> <!-- 使用内联箭头函数 --> <button @click="(event) => warn('Form cannot be submitted yet.', event)"> Submit </button> methods: { warn(message, event) { // 这里可以访问 DOM 原生事件 if (event) { event.preventDefault() } alert(message) } }
事件修饰符
在处理事件时调用event.preventDefault()或event.stopPropagation()是比较常见的,
我们当然可以直接在方法内调用,但为使方法更专注于处理数据逻辑,
Vue为v-on提供了事件修饰符即用.打头的指令后缀,如下:
<!-- 单击事件将停止传递 --> <a @click.stop="doThis"></a> <!-- 提交事件将不再重新加载页面 --> <form @submit.prevent="onSubmit"></form> <!-- 修饰语可以使用链式书写 --> <a @click.stop.prevent="doThat"></a> <!-- 也可以只有修饰符 --> <form @submit.prevent></form> <!-- 仅当 event.target 是元素本身时才会触发事件处理器 --> <!-- 例如:事件处理器不来自子元素 --> <div @click.self="doThat">...</div>
tips:使用修饰符时注意调用顺序,如:
@click.prevent.self会组织元素及其子元素的所有事件的默认行为
@click.self.prevent只会阻止对元素本身的点击事件的默认行为
.capture / .once / .passive 修饰符与原生addEventListener事件相对应
<!-- 添加事件监听器时,使用 `capture` 捕获模式 --> <!-- 例如:指向内部元素的事件,在被内部元素处理前,先被外部处理 --> <div @click.capture="doThis">...</div> <!-- 点击事件最多被触发一次 --> <a @click.once="doThis"></a> <!-- 滚动事件的默认行为 (scrolling) 将立即发生而非等待 `onScroll` 完成 --> <!-- 以防其中包含 `event.preventDefault()` --> <div @scroll.passive="onScroll">...</div>
按键修饰符
<!-- 仅在 `key` 为 `Enter` 时调用 `submit` --> <input @keyup.enter="submit" />
可以直接使用KeyboardEvent.key暴露的按键名作为修饰符,但需要转化为kebab-case形式(短横线)
<input @keyup.page-down="onPageDown" />
上例只有在$event.key为 'PageDown'时才调用事件处理
键盘事件:
keydown:键盘按下后触发
keyup:键盘按下抬起后触发
标签:事件处理,DOM,修饰符,处理器,内联,event,事件 From: https://www.cnblogs.com/zmhz/p/17345775.html