Skip to content

computed

computed计算属性,也是一个配置项

当一个数据是由若干个data中的数据计算而来,可以使用computed

原理:底层借助了Objcet.defineproperty()方法提供的gettersetter

与methods实现相比,内部有缓存机制(复用),效率更高,调试方便

1.基本语法

1.1 定义

computed是一个对象,其中可包含若干个计算属性,每个计算属性都是一个方法,需要return返回一个值

computed中的数据会被挂载到组件实例上,在js环境中可通过this访问,在视图中可在直接使用

vue
<template>
	<div>
        {{ total }}
    </div>
</template>

<script>
export default {
    data(){
        return{
            num1: 11,
            num2: 22
        }
    },
    computed:{
        total(){
			return this.num1 + this.num2
        }
    }
}
</script>

1.2 访问

计算属性是一个方法,但我们不能直接使用,只可以访问

在js环境中,虽然计算属性是一个有返回值的方法,但是访问时不能写()

vue
<script>
export default {
    data(){
        return{
            num1: 11,
            num2: 22
        }
    },
    computed:{
        total(){
			return this.num1 + this.num2
        }
    },
    methods:{
        fn(){
			console.log(this.total)
        }
    }
}
</script>

TIP

计算属性不可以直接修改其值,当计算属性依赖的值改变时,计算属性的值会自动更新

依赖的值也就是计算属性中所用到的data中的数据

2.set和get

在computed中,计算属性除了可以写成方法,也可以写成对象,对象里只能包含set()get()两个函数

js
computed:{
	FnNameCp:{	//计算属性名
		get(){
			return xxx
		},
		set(data){
			//...
		},
	},
},

set()get()函数的执行时机如下

  • set:当计算属性被篡改时,接受一个参数,即改变后的新值
  • get:初次读取时会执行一次,当依赖的数据发生改变时会被再次调用

get()就相当于计算属性简写的函数

3.缓存机制

计算属性第一次调用之后就会缓存到计算机中,后面再次调用时,计算属性的方法不会执行,而是直接返回值

但是当计算属性被篡改时,才会重新执行计算属性的方法

MIT Licensed