我有一个 Angular 7 应用程序,我希望在其中有一长串 HTML 输入组件,每个组件共享相似的样式,但双向绑定到 Typescript 文件中单个对象的不同字段。我认为这应该可以通过配置数组来实现ngFor
,类似于:
app.component.html:
<div *ngFor="let inputConfig of inputConfigs;">
<input name="{{inputConfig.id}}" type="number" placeholder="{{inputConfig.description}}"
[(ngModel)]="inputConfig.bindingField">
</div>
app.component.ts:
export class AppComponent {
public objectToBind = {prop1: 5, prop2: 10, prop3: 30};
public inputConfigs = [
{ id: "prop1", description: "Property 1", bindingField: this.objectToBind.prop1},
{ id: "prop2", description: "Property 2", bindingField: this.objectToBind.prop2},
{ id: "prop3", description: "Property 3", bindingField: this.objectToBind.prop3}
// additional fields to follow
];
}
这个问题似乎是 Typescript(或者更确切地说,JS)bindingField: this.objectToBind.prop1
在启动 inputConfigs 时按值复制。结果是输入组件实际上并没有绑定到objectToBind.prop1
,而是绑定到它的文字副本,没有任何引用。
有没有办法解决这个问题,我想用ngModel
a绑定到不同的属性ngFor
?还是我别无选择,只能放弃ngFor
并在模板中静态编写所有内容?任何帮助将不胜感激!
顺便说一句,有一些答案指向在ngModel
表达式中使用索引,例如添加let index = index;
和ngFor
使用[(ngModel)]="inputConfigs[index].bindingField"
。但这似乎没有帮助。