v-on 指令可以监听 DOM 事件,并在触发时运行一些 JavaScript 代码
简单的逻辑运算
事件类型由参数指定
<div id="app"><button v-on:click="counter += 1">点击加 1</button><!--简写为 --><button @click="counter += 1">点击加 1</button><p>按钮被点击了 {{ counter }} 次</p></div>
const vm = new Vue({el: 'app',data: {counter: 0}})
调用方法
但是很多事件处理逻辑是非常复杂的,所以直接把 JavaScript 代码写在 v-on 指令中是不可行的。所以 v-on 还可以接收一个需要调用的方法名称。
- 事件触发调用的方法内的this指向Vue的实例
- 事件对象指向触发事件的元素
<div id="app"><!-- `addCounter` 是在下面定义的方法名 --><button v-on:click="addCounter">点击加 1</button><p>按钮被点击了 {{ counter }} 次</p></div>
const vm = new Vue({el: '#app',data: {counter: 0},// 在 methods 对象中定义方法methods: {addCounter: function (e) {// this 在方法里指向当前 Vue 实例this.counter += 1;// e 是原生 DOM 事件cosnole.log(e.target);}}})
传参
除了直接绑定到一个方法,也可以在内联JavaScript 语句中调用方法:
在内联语句中使用事件对象时,可以利用特殊变量 $event:
<div id="app"><button v-on:click="addCounter(5, $event)">点击加 5</button><p>按钮被点击了 {{ counter }} 次</p></div>
new Vue({el: '#app',methods: {addCounter: function (num, e) {this.counter += 5;cosnole.log(e.target);}}})
methods中的函数,也会直接代理给Vue实例对象,所以可以直接运行:
vm.addCounter();
可以绑定动态事件,Vue版本需要2.6.0+
<div v-on:[event]="handleClick">点击,弹出1</div>
```javascript const vm = new Vue({ el: ‘#app’, data: { event: ‘click’ }, methods: { handleClick () {
alert(1);
} } })
- 可以不带参数绑定一个对象,Vue版本需要2.4.0+。- { 事件名:事件执行函数 }- 使用此种方法不支持函数传参&修饰符```html<div v-on="{ mousedown: doThis, mouseup: doThat }"></div>
