Vue计算属性

时间:2022-06-25 12:12:15

github地址:https://github.com/manlili/vue_learn里面的lesson06

一 计算属性定位

当一些数据需要根据其它数据变化时,这时候就需要计算属性

二 $watch实现计算属性

举个栗子:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vue计算属性</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="test">
a的值是{{a}}
b的值是{{b}}
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
a: 1,
b: 0
}
})
myVue.$watch("a",function () {
this.b = this.a+3;
})
</script>
</body>
</html>

正常输出时:a的值是1,b的值为0,但是当在控制台输入:

Vue计算属性

说明b的数据是根据a变化而变化的

三 computed实现计算属性

上面用$watch可以实现计算属性,但是有点麻烦,首先需要定义b,实例化以后给实例绑定一个$watch方法,下面来看一个更简单的方法实现计算属性

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vue计算属性</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="test">
a的值是{{a}}
b的值是{{b}}
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
a: 1
},
computed: {
b: function () {
return this.a+3;
}
}
})
</script>
</body>
</html>

上面正常的输出是:a的值是1,b的值是4,但是在控制台输入:

Vue计算属性

说明b的数据是根据a变化而变化的

四 set实现反计算

多数时候a变化,b跟着a变化,但是有时候我们想让b变化时,a跟着b变化,Vue作者给我们提供了set方法来反计算.

举个栗子:(get是b获取值,set是给b赋新值)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vue计算属性</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="test">
a的值是{{a}}
b的值是{{b}}
</div>
<script type="text/javascript">
var myVue = new Vue({
el: ".test",
data: {
a: 1
},
computed: {
b:{
get: function () {
return this.a+3;
},
set: function (newValue) { //参数不能少
this.a = newValue-1; //a的值变化也会导致b变化
}
}
}
})
</script>
</body>
</html>

上面正常的输出是:a的值是1,b的值是4,但是在控制台输入:

Vue计算属性