计算属性 Computed
所以,对于任何复杂逻辑运算,你都应当使用计算属性 Computed。简单理解就是 Computed 在原来的 data 数据中基础上做了一些处理,处理完后用了一个新的变量进行存储,做的这些处理是不会影响原来的数据值的。并且 Computed 和选项 data 一样,使用的场景非常广泛,凡是能用 this 访问 Vue 实例的地方,都可以访问到 Computed 的数据。
<template>
<div class="home">
<div>{{ _price }}</div>
</div>
</template>
<script>
export default {
data() {
return {
price: 100.85
}
},
computed: {
_price() {
return Math.round(this.price)
}
}
}
</script>
不能被修改
因为 Computed 本身可能是基于选项 data 中的数据进行加工处理,可以理解它没有真身,所以无法给它赋值。我们平时在 Computed 编写的代码其实就是 getter 访问器,因为默认就是 getter,没有 setter。如果想要给 Computed 变量赋值,那么就需要给它设置 setter,代表赋值后要做什么事情?接下来进行实践一下。
<template>
<div class="home">
<div>{{ _price }}</div>
</div>
</template>
<script>
export default {
data() {
return {
price: 100.85
}
},
computed: {
_price: {
get() {
return Math.round(this.price)
},
set(value) {
this.price = value
}
}
},
mounted() {
setTimeout(() => {
this._price = 102.85
}, 1000)
}
}
</script>
代码中实现了 Computed 的 getter 、setter 写法。页面 dom 渲染完毕 1 秒后,会对 Computed 中的 _price 进行赋值,随即就会触发 setter 函数时,会对 选项 data 的值 this.price 进行修改。最后因为响应式的原理,Computed 的 _price 依赖了 this.price,所以 this.price 更新时,_price 的 getter 会重新进行计算。所以页面会显示出来 103。