- 在前端开发中,我们需要经常和用户交互
- 这个时候,我们就必须监听用户发生的时间,比如点击、拖拽、键盘事件等等
- 在 Vue中如何监听事件呢?使用 v-on指令
v-on
介绍- 作用:绑定事件监听器
- 缩写:@
- 预期:Function | Inline Statement | Object
- 参数:event
1. v-on 基础
计数器代码示例:
<div id="app">
<h2>{{counter}}</h2>
<button type="button" @click="increment">+</button>
<button type="button" @click="decrement">-</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
counter: 0
},
methods: {
//对象函数的增强写法
increment() {
this.counter ++
},
decrement() {
this.counter --
}
}
})
</script>
2. v-on 参数
在上面的 计数器代码里,有一个小细节:@click="increament"
方法名后面没有加 ()
?
- 当通过methods 中定义方法,以供
@click
调用时,需要注意参数问题 - 情况一:如果该方法不需要额外的参数,那么方法后的
**()**
可以不添加。- 但是注意:如果方法本身有一个参数,那么会默认将原生事件 event参数传递进去
- 情况二:如果需要同时传入某个参数,同时需要 event时,可以通过
$event
传入事件。
2.1 没有写 ()
<div id="app">
<button type="button" @click="btnClick">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
},
methods: {
btnClick(aaa) {
console.log(aaa)
}
}
})
</script>
2.2 传入了$event 原始DOM事件
<div id="app">
<button type="button" @click="btnClick(13, $event)">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
},
methods: {
btnClick(num, event) {
console.log(num, event)
}
}
})
</script>
2.3 传入的参数不够,或者没有传入参数,但是有 ()
<div id="app">
<button type="button" @click="btnClick(13)">按钮</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
const app = new Vue({
el: '#app',
data: {
},
methods: {
btnClick(num, event) {
console.log(num, event)
}
}
})
</script>
- 传入的参数不够,或者没有传入参数,则控制台打印 undefined
3. v-on 修饰符
- 在某些情况下,我们拿到 event的目的可能是进行一些事件处理。
- Vue 提供了修饰符来帮助我们方便的处理一些事件:
.stop
- 调用event.stopPropagation()
.prevent
- 调用event.preventDefault``()
.{``keyCode`` | ``keyAlias``}
- 只当事件是从特定键触发时才触发回调.native
- 监听组件根元素的原生事件.once
- 只触发一次回调具体更多详见:官网文档
<!-- 停止冒泡 -->
<button @click.stop="doThis"></button>
<!-- 阻止默认行为 -->
<button @click.prevent="doThis"></button>
<!-- 阻止默认行为,没有表达式 -->
<form @submit.prevent></form>
<!-- 串联修饰符 -->
<button @click.stop.prevent="doThis"></button>
<!-- 键修饰符,键别名 -->
<input @keyup.enter="onEnter">
<!-- 键修饰符,键代码 -->
<input @keyup.13="onEnter">
<!-- 点击回调只会触发一次 -->
<button @click.once="doThis"></button>
代码演示 ```html
aaaaaaa
```