Vue.js-computed计算属性
1.1 computed作用
但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示。
减少运算次数, 缓存运算结果. 运用于重复相同的计算。
1.2 计算属性基本使用
计算属性是写在实例的computed选项中的。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性的基本使用</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<h3>{{fullName}}</h3>
<h3>{{getFullName()}}</h3>
</div>
<script src="js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
firstName: 'Lebron',
lastName: 'James'
},
// 计算属性
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
},
// 方法版
methods: {
getFullName(){
return this.firstName + ' ' + this.lastName
}
}
})
</script>
</body>
</html>
执行结果

1.3 计算属性复杂使用
计算属性中也可以进行一些更加复杂的操作
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性的复杂使用</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<h3>总价格:{{totalPrice}}</h3>
</div>
<script src="js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
books: [
{id: 100, name:'Unix编程艺术', price: 119},
{id: 111, name: '代码大全', price: 105},
{id: 112, name: '深入理解计算机原理', price: 98},
{id: 113, name: '现代操作系统', price: 87},
]
},
computed: {
totalPrice: function () {
// 定义result值
let result = 0;
/*for(let i=0; i < this.books.length; i++){
result += this.books[i].price
}*/
// es6写法
for (let i in this.books) {
result += this.books[i].price;
}
// 返回结果值
return result;
}
}
})
</script>
</body>
</html>
执行结果

1.4 计算属性setter和getter
注意: 计算属性一般是没有set方法的,只读属性。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性的setter和getter</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<h3>{{fullName}}</h3>
</div>
<script src="js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
firstName: 'kobe',
lastName: 'Bryant'
},
// 计算属性
computed: {
// get和set方法
fullName: {
/* set: function (newValue) {
const names = newValue.split(' ');
this.firstName = names[0];
this.lastName = names[1];
},*/
get: function () {
return this.firstName +' ' + this.lastName
}
},
}
})
</script>
</body>
</html>
执行结果

1.5 计算属性和methods的比较
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性和methods的比较</title>
</head>
<body>
<!--2.定义一个div元素-->
<div id="app">
<!--直接拼接-->
<h2>{{firstName}} {{lastName}}</h2>
<!--2.通过定义methods-->
<h2>{{getFullName()}}</h2>
<!--3.通过computed-->
<h2>{{fullName}}</h2>
</div>
<script src="js/vue.js"></script>
<script>
// 创建对象
const app = new Vue({
// 挂载要管理的元素
el: '#app',
// 定义数据
data: {
firstName: 'kobe',
lastName: 'Bryant'
},
// 函数
methods: {
getFullName: function () {
console.log('fullName');
// 返回值
return this.firstName + ' ' + this.lastName;
}
},
// 计算属性
computed: {
fullName: function () {
console.log('fullName');
return this.firstName + ' ' + this.lastName
}
}
})
</script>
</body>
</html>
执行结果

1.6 computed小结
定义函数也可以实现与 计算属性相同的效果,都可以简化运算。
不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。

浙公网安备 33010602011771号