我想通过 将ngFor
循环内的模型绑定到输入字段ngModel
,但是如果我将另一个项目添加到列表中,则模型的值将在模型中可见,但在视图中不可见。
<div *ngFor="let model of models">
<input [(ngModel)]="model.foo" name="foo">
{{model | json}}
</div>
<button (click)="addEmptyListItem()">add</button>
如果我bar
在视图中输入model | json
会显示{ 'foo': 'bar' }
,现在如果我向列表中添加另一个元素model | json
仍然会显示{ 'foo': 'bar' }
,但在输入字段中什么都看不到。
我的models
变量来自BehaviorSubject
private $models: BehaviorSubject<Model[]> = new BehaviorSubject([]);
get models(): Model[] { return this.$models.getValue(); }
public addEmptyListItem(): void {
let models = this.models();
models.push(new Model());
this.$models.next(models);
}
其中包含一个列表Model
export class Model { public foo: string; }
[(ngModel)]="model.foo" name="foo"
现在,如果我交换[value]="model.foo" (input)="model.foo = $event.target.value"
:
<div *ngFor="let model of models">
<input [value]="model.foo" (input)="model.foo = $event.target.value">
{{model | json}}
</div>
<button (click)="addEmptyListItem()">add</button>
视图得到正确更新。
问题
有什么我忽略的东西为什么[(ngModel)]
不起作用?
并且不应该[(ngModel)]
也生成类似于上面提到的东西(参见Angular 2 中的双向数据绑定)?