0%

【026】Vue选项:数据中的 methods

介绍

methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。

模版代码:

1
2
3
4
5
methods: {
add() {
this.count += 1;
}
}

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
</head>
<body>
<div id="app">
<div>{{ count }}</div>
<button @click="add">累加</button>
</div>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data() {
return {
count: 0
}
},
methods: {
add() {
this.count += 1;
}
}
})
</script>
</body>
</html>

通过上面的示例代码,我们可以发现:

  1. methods属性给可以给 Vue 定义add方法
  2. 在方法中使用this.可以直接访问data中的数据count

注意

很多小伙伴在定义方法时喜欢使用es6的语法,比如箭头函数() => {},那么在给 Vue 定义方法时,是否也可以使用箭头函数呢?看一下下面的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>
</head>
<body>
<div id="app">
<div>{{ count }}</div>
<button @click="add">累加</button>
</div>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data() {
return {
count: 0
}
},
methods: {
add: () => {
this.count += 1;
}
}
})
</script>
</body>
</html>

在浏览器中运行上面的示例代码,我们可以发现,当我们点击累加按钮时,数据并没有出现出现累加的结果。这是为什么呢?
了解过箭头函数的小伙伴应该知道,() => {}有一个用法就是改变this的指向,那么在 Vue 中,箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例。因此我们可以得出结论:不应该使用箭头函数来定义 method 函数