事件监听
1.v-on的基本使用
首先使用v-on语法编写了一个小型的计数器:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<h2>{{counter}}</h2>
<!-- <button v-on:click="counter++">+</button>-->
<!-- <button v-on:click="counter--">-</button>-->
<!-- <button v-on:click="increment">+</button>-->
<!-- <button v-on:click="decrement">-</button>-->
<button @click="increment">+</button>
<button @click="decrement">-</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
counter:0
},
methods:{
increment(){
this.counter++
},
decrement(){
this.counter--
}
}
})
</script>
</body>
</html>
实现了点击加号,数字显示加一;点击减号,数字显示减一的效果。
2.v-on的参数问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<!-- 1.事件调用方法没有参数-->
<button @click="btn01Click()">按钮1</button>
<button @click="btn01Click">按钮2</button>
<!-- 2.在事件定义时,写函数时省略了小括号,但是方法本身是需要一个参数的,这个时候Vue会默认将浏览器生产的event事件对象作为参数传入到方法-->
<button @click="btn02Click">按钮2</button>
<!-- 3.方法定义时,我们需要event对象,同时又需要其他参数-->
<!-- 在调用方式,如何手动的获取到浏览器参数的event对象:$event-->
<button @click="btn03Click(123,$event)">按钮3</button>
<button>按钮4</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好"
},
methods:{
btn01Click(){
},
btn02Click(event){
console.log('------',event)
},
btn03Click(abc,event){
console.log('+++++++',abc, event);
}
}
})
</script>
</body>
</html>
注意点:1.事件调用方法没有参数时,括号可以省略,如下两种方式都为正确;
<button @click="btn01Click()">按钮1</button>
<button @click="btn01Click">按钮2</button>
2.方法本身需要一个参数,但是写函数时省略了小括号,这时Vue会默认将浏览器产生的event事件对象作为参数传入,就会产生如下效果,MouseEvent为event事件对象传入参数;
<button @click="btn02Click">按钮2</button>
btn02Click(event){
console.log('------',event)
},
3.定义方法时,即需要event对象又需要其他参数时,利用手动获取浏览器参数的event对象,在event前加上$即可。
<button @click="btn03Click(123,$event)">按钮3</button>
btn03Click(abc,event){
console.log('+++++++',abc, event);
}
3.v-on的修饰符
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<!-- 1. .stop修饰符的使用-->
<div @click="divClick">
<button @click.stop="btnClick">按钮</button>
</div>
<!-- 2. .prevent修饰符的使用-->
<br>
<form action="baidu">
<input type="submit" value="提交" @click.prevent="submitClick">
</form>
<!-- 3. .监听某个键帽的点击-->
<input type="text" @keyup.enter="keyUp">
<!-- 4. .once修饰符的使用-->
<button @click.once="btn2Click">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el:"#app",
data:{
message:"你好"
},
methods:{
btnClick(){
console.log('btnClick');
},
divClick(){
console.log('divClick');
},
submitClick(){
console.log('submitClick');
},
keyUp(){
console.log('keyUp');
},
btn2Click(){
console.log('btn2Click');
}
}
})
</script>
</body>
</html>
注意点:1. .stop修饰符可以阻止多级对象冒泡,类似于js中点击父盒子时,子盒子显示。点击几次,显示几次数字;
<button @click.stop="btnClick">按钮</button>
btnClick(){
console.log('btnClick');
},
2. .prevent修饰符的使用,可以阻止向服务器传递。
<form action="baidu">
<input type="submit" value="提交" @click.prevent="submitClick">
</form>
submitClick(){
console.log('submitClick');
},
3. .keyUp监听某个键帽的点击。按下键盘任一按键时,显示按下键帽的数量
<input type="text" @keyup="keyUp">
如果只想敲击回车才有keyUp显示数量时,在时间后加上.enter
<input type="text" @keyup.enter="keyUp">
4. .once修饰符的使用。点击事件使用时,使得显示的数量只为1,即只显示一次点击数量。
<button @click.once="btn2Click">按钮</button>