如基本使用
- 前端开发中,经常要和用户进行交互,所以需要监听用户的一些操作,如点击,键盘等
<div id="app"><h2>{{counter}}</h2><button @click="increment">+</button><button @click="decrement">-</button></div><script>const app = new Vue({el: '#app',data: {counter: 0},methods: {increment () {this.counter++},decrement () {this.counter--}}})</script>
v-on参数
- 我们在事件监听时,如果一个方法本身不需要传递进去参数,我们调用该方法时就可以省略括号()
- 但是如果一个方法需要我们调用时传递进来一个函数,但是我们没有传递参数,只是用空()来调用,如 @click= “btnClick()” 这时就会默认传入一个undefined来作为形参
- 但是如果我们调用一个需要传递参数的方法时,既没有传递参数,又没有加小括号,这时Vue会默认将浏览器生成的event事件作为参数,传入到方法中
- 我们在浏览器中进行一些操作时,浏览器每次都会生成一个event事件对象的!
- 在定义方法时,该方法既需要event对象,同时又需要别的参数时,不能使用 @click=”btnClick(123, event)” 这种方法去拿这个event对象,我们必须采用$event的方法来获取该event对象,如下所示
<div id="app"><button @click="btnClick(123, $event)"></button></div><script>const app = new Vue({el: '#app',data: {message: 'hello'},methods: {btnClick (el, event) {console.log(el + '----' + event)}}})</script>
v-on修饰符
- 当我们点击按钮时,会发生事件冒泡,先打印btnClick 后打印divClick,以前我们处理这种问题的方法就是e.stopPropagation()
.stop修饰符:现在在Vue中使用修饰符就可以解决这个问题 这时就不会向上冒泡了
<div @click="divClick"><button @click="btnClick">按钮</button></div><script>const app = new Vue({el: '#app',data: {message: 'hello'},methods: {btnClick () {console.log('btnClick')},divClick () {console.log('divClick')}}})</script>
.prevent修饰符:阻止默认事件
- .{keyCode | keyAlias} 修饰符:监听键盘按钮事件,如,就监听键盘上回车的抬起动作,当一抬起,就执行该方法
- .once修饰符:点击第一次有用
