vue计算属性实现
计算属性的基本概念
计算属性是Vue.js中一种特殊的属性,用于声明式地定义依赖其他数据的派生值。计算属性基于它们的依赖进行缓存,只在相关依赖发生改变时才会重新计算。
计算属性的基本语法
在Vue组件中,计算属性定义在computed选项中:
new Vue({
data: {
message: 'Hello'
},
computed: {
reversedMessage: function() {
return this.message.split('').reverse().join('')
}
}
})
计算属性与方法的区别
计算属性是基于它们的响应式依赖进行缓存的,只在相关依赖发生改变时才会重新计算。而方法调用总会执行函数。
// 方法调用
methods: {
reversedMessageMethod: function() {
return this.message.split('').reverse().join('')
}
}
// 计算属性
computed: {
reversedMessage: function() {
return this.message.split('').reverse().join('')
}
}
计算属性的Setter
计算属性默认只有getter,但在需要时也可以提供setter:
computed: {
fullName: {
get: function() {
return this.firstName + ' ' + this.lastName
},
set: function(newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
计算属性的缓存机制
计算属性会基于它们的响应式依赖进行缓存,只要依赖的数据没有变化,多次访问计算属性会立即返回之前的计算结果,而不必再次执行函数。
计算属性的依赖追踪
Vue能够自动追踪计算属性的依赖关系,当依赖的数据发生变化时,所有依赖该数据的计算属性都会自动更新。
计算属性的最佳实践
计算属性适合用于复杂逻辑或需要缓存结果的场景。对于简单的表达式,可以直接使用模板内的表达式。对于需要参数的逻辑,使用方法可能更合适。
计算属性与侦听器的对比
计算属性通常比侦听器更适合处理数据变化的场景,因为计算属性可以自动追踪依赖,而侦听器需要手动指定要侦听的数据。
// 使用计算属性
computed: {
fullName: function() {
return this.firstName + ' ' + this.lastName
}
}
// 使用侦听器
watch: {
firstName: function(val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function(val) {
this.fullName = this.firstName + ' ' + val
}
}






