一、基础语法
Vue 中给每一个实例对象都提供了一个 computed 属性,用来设置 Vue 实例的“计算属性”。
语法结构:
new Vue({computed: {属性名一() {return 属性值一;},属性名二() {return 属性值二;}}})
注意:虽然从代码层面看,计算属性是一个方法,但是在使用时,我们需要把它当作一个属性来使用,也就是说不需要加小括号调用。
<h1>{{计算属性名}}</h1>
使用计算属性,通常需要满足以下两个条件:
- 需要从 data 原数据的基础之上,经过一些操作得到一条新数据;
- 得到新数据的同时,不会改变原数据;
二、计算属性的缓存
计算属性的缓存是指当一个计算属性被使用多次时,只会执行一次。
计算属性在第一次使用时,会执行对应的方法,并将执行结果缓存下来。后续每次使用该计算属性,都可以直接读取缓存中的结果。<h1>{{计算属性名}}</h1><h1>{{计算属性名}}</h1><h1>{{计算属性名}}</h1>
计算属性和 methods 的区别
实际上,计算属性能实现的效果,methods 方法也都能实现。例如:
但是,区别就在于,计算属性有缓存,而 methods 没有缓存。所以 methods 每次使用的时候都会执行方法,使用几次就会执行几次。<h1>{{reverseMsg}}</h1><h1>{{reverseMsg}}</h1><h1>{{reverseMsg}}</h1><h2>{{getReverseMsg()}}</h2><h2>{{getReverseMsg()}}</h2><h2>{{getReverseMsg()}}</h2><script>new Vue({el: '#app',data() {return {msg: 'hello world'}},computed: {reverseMsg() {console.log('计算属性执行了');return this.msg.split("").reverse().join('');}},methods: {getReverseMsg() {console.log('方法执行了');return this.msg.split("").reverse().join('');}}})</script>
三、计算属性的修改
前面常用的计算属性的语法,实际上是计算属性的简写。
一个计算属性的完整写法,应该如下:
所有的计算属性,默认都有一个 get 方法,但是没有 set 方法,因此计算属性在默认情况下都不能修改。new Vue({computed: {// 完整写法计算属性名: {get() {return 计算属性值;}},// 简写计算属性名() {return 计算属性值;}}})
如果我们想要修改计算属性,需要自己手动添加一个 set 方法,语法结构如下:new Vue({computed: {// 完整写法计算属性名: {get() {return 计算属性值;},set(形参) {// 根据形参修改计算属性依赖的原数据}}}})
