【发布时间】:2017-03-13 12:06:53
【问题描述】:
我正在制作一个 Angular 2 网络应用程序。我有一个模型,它由几个关键属性组成,然后是根据这些关键值计算的其他几个属性。
我所有的属性都有 getter 方法。为了使我的计算属性与我的关键属性保持同步,关键属性通过重新评估所有计算属性的 setter 方法进行更改。这是一个简化的示例:
export class Model{
private _keyValue: number;
private _computedValue: number;
getKeyValue(): number{
return this._keyValue;
}
setKeyValue(value: number){
this._keyValue = value;
this.evaluateComputedValues(); // This might be time-consuming
}
getComputedValue(): number{
return this._computedValue;
}
}
这使我的模型保持一致:每次更改一个关键属性时,都会重新计算所有计算的属性。
现在我需要弄清楚如何将我的属性绑定到我的组件视图。看来我可以使用插值来呈现计算属性 getter:
<div>{{model.getComputedValue()}}</div>
但是,我不确定将我的关键属性绑定到输入字段的最佳方式是什么。所有使用双向绑定的示例似乎都像这样使用 ngModel:
<input [(ngModel)]='model.property'>
但是,这似乎是为了绑定到简单的属性。理想情况下,我需要使用单独的 getter 和 setter 方法(getKeyValue 和 setKeyValue)进行双向绑定。
在 Angular 2 中是否有任何内置方法可以实现这一点?
【问题讨论】:
-
为什么不使用 TypeScript 的 getter 和 setter 而不是函数?您可以获得相同的功能,但可以像使用字段一样使用它们。另见stackoverflow.com/questions/12827266/get-and-set-in-typescript
-
@Günter Zöchbauer 如果我走那条路,会像这样 [(ngModel)]='keyValue()' 那样绑定属性吗? Angular 2 会弄清楚何时使用 getter 和 setter?
-
差不多。它看起来像
[(ngModel)]='keyValue'。对于这样的 getter/setter,您不需要()。
标签: angular typescript