2017-05-25 85 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) { 

這樣嚴格的平等比較數字。表單輸入將值轉換爲字符串。有時候簡單的人可以得到你。