Version: Next
3. 事件定义与使用 v-on
3.1 绑定事件
在要绑定事件的元素上,添加
v-on
属性,其中书写事件触发调用的函数名
v-on:onclick
v-on:onmouseover
v-on:onmove
v-on:onkeyup
...
事件函数
统一定义在vue的methods
属性中
methods
:用来定义vue中的事件在Vue定义的事件中,
this
就表示当前Vue实例,日后可以在事件中通过使this
获取Vue实例中的相关数据绑定事件的简化写法
@
,可以代替v-on
事件方法的简化写法:省略
:function
直接方法名(){}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件</title>
</head>
<body>
<div id="app">
<h2 v-text="msg"></h2>
<h2>年龄:{{age}}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
el: "#app",
data: {
msg: "hello Vue",
age: 23
}
})
</script>
</body>
</html>
- 页面上显示了
age
值为23,希望在页面上放置一个按钮,点击一次age
就+1
思路:
- 在页面上放置一个按钮
- 给按钮绑定单击事件
- 在单机事件中,获取
age
值,修改age
的值,渲染页面
- 通过Vue对象的名称
app
(本代码中定义为app),或者this
,获取当前Vue对象- 从Vue对象中取出
age
,再加一
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件</title>
</head>
<body>
<div id="app">
<h2 v-text="msg"></h2>
<h2>年龄:{{age}}</h2>
<br>
<input type="button" value="点我增加年龄" v-on:click="changeAge" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
el: "#app",
data: {
msg: "hello Vue",
age: 23
},
methods: {
changeAge: function() {
this.age++;
}
}
})
</script>
</body>
</html>
3.1.1 什么是双向绑定
单向绑定
例如在事件中改变age
的值,标签内的值也相应改变,显示在了页面上
双向绑定
标签内的值发生了改变,Vue data
中的值也随之发生改变
@
绑定
3.2 Vue事件的简化写法——
@
代替v-on
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件</title>
</head>
<body>
<div id="app">
<h2>{{age}}</h2>
<input type="button" value="通过v-on事件修改年龄" v-on:click="changeAge" />
<input type="button" value="年龄-1" @click="editAge" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const vue = new Vue({
el: "#app",
data: {
age: 23
},
methods: {
changeAge: function() {
this.age++;
},
editAge: function() {
this.age--;
}
}
})
</script>
</body>
</html>
:function(){}
3.3 事件方法的简化写法——省略直接方法名(){}
即可
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件</title>
</head>
<body>
<div id="app">
<span id="">
{{count}}
</span>
<input type="button" value="改变count的值" @click="changeCount" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const vue = new Vue({
el: "#app",
data: {
count: 1
},
methods: {
changeCount() {
this.count++;
}
}
})
</script>
</body>
</html>
3.4 Vue事件中的参数传递
改变count为指定的值
在使用事件时,可以直接在事件调用出给事件进行参数传递,在事件定义处通过定义对应形参接受
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件</title>
</head>
<body>
<div id="app">
<span id="">
{{count}}
</span>
<input type="button" value="改变count为指定值" @click="changeCount(25)" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const vue = new Vue({
el: "#app",
data: {
count: 1
},
methods: {
changeCount(num) {
this.count = num;
}
}
})
</script>
</body>
</html>
3.5 事件小案例
页面上有两个按钮
-
和+
,通过点击按钮可以改变购物数,购物数不能为复,每人限购10个,超出范围给用户提示
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<input type="button" value="-" @click="minus" />
<input type="button" value="+" @click="plus" />
<h2>{{count}}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
const app = new Vue({
el: "#app",
data: {
count: 1
},
methods: {
minus() {
if (this.count > 1) {
this.count--;
} else {
alert("不能再小了");
}
},
plus() {
if (this.count < 10) {
this.count++;
} else {
alert("每人限购10件");
}
}
}
})
</script>
</body>
</html>