- 案例:用户输入信息,然后翻转用户输入的字符串。
(1) 插值语法可以实现,但是有三个问题
①代码可读性差
②代码不可复用
③ 代码难以维护
(2) 可以使用 methods 方式实现,存在 1 个问题
①效率低,即使数据没有发生变化,但每一次仍然会调用 method。
(3) 使用计算属性可以解决以上问题。
2. 什么是计算属性?
data 中的是属性。用 data 的属性经过计算得出的全新的属性就是计算属性。
3. 计算属性的使用
(1) 计算属性需要使用:computed<div id="app">
<h1>{{msg}}</h1>
输入的信息:<input type="text" v-model="info"><br>
反转的信息:{{reversedInfo}} <br>
反转的信息:{{reversedInfo}} <br>
反转的信息:{{reversedInfo}} <br>
反转的信息:{{reversedInfo}} <br>
</div>
<script>
const vm = new Vue({
el : '#app',
data : {
msg : '计算属性-反转字符串案例',
info : ''
},
computed : {
reversedInfo:{
get(){
console.log('getter 被调用了');
return this.info.split('').reverse().join('')
},
set(val){
//this.reversedInfo = val // 不能这样做,这样会导致无限递归
this.info = val.split('').reverse().join('')
}
}
}
})
</script>
(2) 计算属性通过 vm.$data 是无法访问的。计算属性不能通过 vm.$data 访问。
(3) 计算属性的 getter/setter 方法中的 this 是 vm。
(4) 计算属性的 getter 方法的调用时机:
1 第一个时机:初次访问该属性。
2 第二个时机:计算属性所依赖的数据发生变化时。
(5) 计算属性的 setter 方法的调用时机:
1当计算属性被修改时。(在 setter 方法中通常是修改属性,因为只有当属性值变化时,计算属性的 值就会联动更新。注意:计算属性的值被修改并不会联动更新属性的值。)
(6) 计算属性没有真正的值,每一次都是依赖 data 属性计算出来的。
(7) 计算属性的 getter 和 setter 方法不能使用箭头函数,因为箭头函数的 this 不是 vm。而是 window。
4. 计算属性的简写形式
只考虑读取,不考虑修改时,可以启用计算属性的简写形式。computed : {
reversedInfo(){
console.log('getter 被调用了');
return this.info.split('').reverse().join('')
}
}