computed之计算属性
2020-07-07 本文已影响0人
瑟闻风倾
计算属性:在模版中可以直接通过插值语法显示一些data中的数据,但有时我们可能需要对数据进行一些处理和转化后再显示,或者需要将多个数据结合起来进行显示,此时就要用到计算属性。
(1) 计算属性的getter和setter
计算属性一般只使用getter来读取,在某些情况下可以提供一个setter方法(不常用)。
- 计算属性的完整写法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Document</title>
<script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
<div id="app">
<h2>{{fullName}}</h2>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
firstName:"ya",
lastName:"yang"
},
computed:{
fullName: {
set: function(newValue){
console.log("----",newValue)
const names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[1]
},
get: function(){
return this.firstName + ' ' + this.lastName
}
},
}
});
</script>
</html>
- 计算属性的简写(语法糖)
计算属性一般没有set方法,此时为只读属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Document</title>
<script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
<div id="app">
<h2>{{fullName}}</h2>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
firstName:"ya",
lastName:"yang"
},
computed:{
// 计算属性一般没有set方法,此时为只读属性
fullName:function(){
return this.firstName + ' ' + this.lastName
}
}
});
</script>
</html>
(2) 计算属性的缓存(对比computed和methods)
- 计算属性的基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Document</title>
<script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
<div id="app">
<!-- 1. 直接拼接:语法过于繁琐 -->
<h2>{{firstName + ' ' + lastName}}</h2>
<h2>{{firstName}} {{lastName}}</h2>
<!-- 2. 通过定义methods -->
<h2>{{getFullName()}}</h2>
<!-- 3. 通过计算属性computed -->
<h2>{{fullName}}</h2>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
firstName:"ya",
lastName:"yang"
},
/* computed中定义计算属性(计算属性定义的格式和方法定义一样): 计算属性有缓存,性能更好,优选计算属性*/
computed:{
fullName:function(){
return this.firstName + ' ' + this.lastName
}
},
/* methods中定义方法: methods中方法调用几次就计算几次,性能没有计算属性好*/
methods:{
getFullName:function(){
return this.firstName + ' ' + this.lastName
}
}
});
</script>
</html>
- 计算属性的复杂操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Document</title>
<script type="text/javascript" src="../first/vue1026.js"></script>
</head>
<body>
<div id="app">
<h2>总价:{{books[0].price + books[1].price + books[2].price + books[3].price}}</h2>
<h2>总价:{{getTotalPrice()}}</h2>
<h2>总价:{{totalPrice}}</h2>
</div>
</body>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
books:[
{id:1,name:"红楼梦",price:60},
{id:2,name:"西游记",price:62},
{id:3,name:"水浒传",price:63},
{id:4,name:"三国演义",price:64},
]
},
computed:{
totalPrice:function(){
let result = 0
for (let i = 0; i < this.books.length; i++) {
result += this.books[i].price;
}
return result
}
},
methods:{
getTotalPrice:function(){
let result = 0
for (let i = 0; i < this.books.length; i++) {
result += this.books[i].price;
}
return result
}
}
});
</script>
</html>
为什么要使用计算属性:computed和methods看起来都可以实现我们的功能,但是计算属性会进行缓存,多次使用时计算属性只会调用一次,性能更高,所以优选使用计算属性。