- 在前端开发中,我们需要经常和用户交互
- 这个时候,我们就必须监听用户发生的时间,比如点击、拖拽、键盘事件等等
- 在 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
```
