Angular 角度4:显示;“聚合”;模板中的属性(单向)

Angular 角度4:显示;“聚合”;模板中的属性(单向),angular,Angular,我有视图模型类,这些类是我从来自服务器的JSON对象构造的。然后将这些类绑定到模板 在某些情况下,我需要向这些类添加额外的属性(即除了JSON对象中的属性)。例如,我可能需要显示订单的总额: public total(): number { return this.price * this.count; } 我学习了如何绑定到这样的属性 然而,我想知道是否有其他的选择,可以更符合角度。例如,我想知道是否可以使用管道来显示这些“聚合”属性,而不是完全创建一个新属性 我的问题是-解决这个问题的

我有
视图模型
类,这些类是我从来自服务器的JSON对象构造的。然后将这些类绑定到模板

在某些情况下,我需要向这些类添加额外的属性(即除了JSON对象中的属性)。例如,我可能需要显示订单的总额:

public total(): number {
  return this.price * this.count;
}
我学习了如何绑定到这样的属性

然而,我想知道是否有其他的选择,可以更符合角度。例如,我想知道是否可以使用管道来显示这些“聚合”属性,而不是完全创建一个新属性


我的问题是-解决这个问题的方法是什么

这取决于计算聚合的成本,以及视图上共存的聚合数量

  • 如果性能开销可以忽略不计,那么您的解决方案在我看来很好,因为它易于编写和维护,并且您只需付出很少的努力就可以保证值是正确的

  • 如果性能开销很大,则需要缓存聚合,并在输入更改时重新计算它们。即使在RXJS的帮助下,这种额外的逻辑也可能变得相当复杂,但这对于实现可接受的性能是必要的

在您的示例中,每次更改检测运行执行一次乘法不应该对性能产生可测量的影响(更不用说明显的影响),但是在每次更改检测运行中过滤10000个对象的列表,或者计算10000个订单项的总数是有问题的

如果有疑问,我会实施简单的方法,并衡量它是否满足性能目标。或者引用Donald Knuth的话:

程序员浪费大量时间考虑或担心其程序中非关键部分的速度,而在考虑调试和维护时,这些提高效率的尝试实际上会产生强烈的负面影响。我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。然而,我们不应该在这关键的3%上放弃我们的机会


你做这件事的方式是完美的角度,我想说你做这件事的方式非常好。业务逻辑应该放在你的课堂上,这就是你正在做的。无需寻找替代品。不要滥用管道。管道应该主要被视为格式化程序,比如在数字中添加逗号,或者格式化为货币或日期。“角度方法”是使你所做的事情非常透明和明显,而在实际计算中,管道并不是一种很好的方法,因为我需要知道的太多了。使用getter是一种有角度的方法。不过,更好或更复杂的方法可能是在需要计算这些“聚合”属性时构建逻辑来计算这些属性,而不是依赖更改检测来为您进行计算。谢谢您的报价!