在 Vue.js 文档中有一个如下示例:
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})
上面的代码是命令式的和重复的。将其与计算属性版本进行比较:
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
什么情况下观察者比计算属性更合适?我应该如何决定选择哪个?文档一直说它更“通用”,但并没有真正说明它的目的。
原文由 serkan 发布,翻译遵循 CC BY-SA 4.0 许可协议
计算属性
计算属性示例:
这段特定的代码有什么作用?
它为组件创建一个名为
val
的属性(在原型上,所以<vueInstanece>.hasOwnProperty('val')
会显示false
) 。它有一个依赖树,在这种情况下由 反应 属性(数据属性,其他计算属性)组成:
this.someDataProperty
,这意味着依赖关系发生变化的那一刻,计算属性将被重新计算。尽管进行了辩论,但不能将论据传递给它。所以像
做不到
[编辑] 见: https ://v2.vuejs.org/v2/guide/computed.html#Computed-Setter
观察者
观察者样本:
它不会创建任何新属性,但它会监视反应属性的更改。
只监视一个特定的属性,不像计算的,任何依赖属性的变化都会导致重新计算。
具有新旧价值的论据。
因此,如果出现以下情况, 计算属性 将是可行的方法:
您想要一个始终依赖于其他属性的属性。就像模板的文本格式一样,甚至是代码中的示例。
或者减少可变长度,因为这很常见:
可以简化为:
不仅仅是变量大小的减少,每次商店更新时,您都会在
someDeeplyNestedProperty
中获得最新值。如果您想查看某个反应性属性是否已更改为有利值以了解您已准备好执行某项操作,那么 Watchers 很有用。
喜欢:
编辑:我遇到了 Flavio Copes 的一些好文章,其中列出了每个用例(方法、计算道具、观察者)的常见用例:
对 DOM 中发生的某些事件做出反应
当组件中发生某些事情时调用函数。您可以从计算属性或观察者调用方法。