2017-05-25 66 views
0

时,我采用了棱角分明4打字稿没有更新,我有<select>个表在我的模板:角ngModel设置变量

<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> 

内的另一部件我能够添加/删除工人名单并且它被输出到Subject该组件所预订:

this.workerRemoved.subscribe(worker => { 
    _each(this.tasksDetails, taskTemplate => { 
     if (taskTemplate.uiMetadata.worker === member.resourceId) { 
      taskTemplate.uiMetadata.worker = ''; 
     } 
    }); 
}); 

的问题是,当订阅在变量更新字段,ngModel没有拿起变化和反射它在用户界面中。

Chrome DevTools output

因此,我们最终与在ng-reflect-model正显示出“11”的情况下,因为“11”选项已被删除的工人变量是一个空字符串,并选择显示为空白。

如何让Angular保持模型与我在订阅中所做的更改保持同步?我试图将其包装在NgZone.run()中,并且还调用ChangeDetectorRef.detectChanges(),但都不会更新ng-reflect-model值。

Here is a Plunker reproducing the error

+0

您可以创建一个重新生成问题的重陷吗? – echonax

+0

@echonax添加链接到Plunker – BeaverusIV

+1

https://plnkr.co/edit/SGbhsySRZAxWgWuANCwC?p=preview – yurzui

回答

1

我找到了解决办法感谢yurzui指着我在正确的方向:

if (taskTemplate.uiMetadata.worker === member.resourceId) { 

变化

if (+taskTemplate.uiMetadata.worker === +member.resourceId) { 

这样严格的平等比较数字。表单输入将值转换为字符串。有时候简单的人可以得到你。