我使用的是Angular 4和Typescript,我的模板中有一个 <select>
的表:
<tr *ngFor="let task of tasksDetails">
<td>{{task.name}}</td>
<td>
<select class="form-control" [(ngModel)]="task.uiMetadata.worker">
<option value="">Select worker</option>
<option *ngFor="let worker of workers" [value]="worker.resource.id">{{worker.resource.name}}</option>
</select>
</td>
</tr>
在另一个组件中,我能够添加/删除到employees列表,并输出到 Subject
,该组件订阅:
this.workerRemoved.subscribe(worker => {
_each(this.tasksDetails, taskTemplate => {
if (taskTemplate.uiMetadata.worker === member.resourceId) {
taskTemplate.uiMetadata.worker = '';
}
});
});
问题是,当订阅更新变量中的字段时,ngModel不会接收更改并在UI中反映它 .
因此,我们最终会遇到 ng-reflect-model
显示"11"的情况,worker变量是一个空字符串,并且select显示为空白,因为"11"选项已被删除 .
如何让Angular保持模型与我在订阅中所做的更改保持同步?我已经尝试将其包装在 NgZone.run()
中并且还调用 ChangeDetectorRef.detectChanges()
,但两者都不会更新 ng-reflect-model
值 .
1 回答
我找到了解决方案,感谢yurzui指出我正确的方向:
改变为
所以严格的平等就是比较数字 . 表单输入将值转换为字符串 . 有时容易的人可以得到你 .