2017-07-26 49 views
0

我有一個ngIf使用select中的值來顯示或不是另一個選擇,但是當我改變第一個select中的值時,ngIf仍然使用舊的價值。我使用的代碼:**解決** - 角4選擇不更新ngIf值

<div class="form-group" > 
 
\t <label>First select</label> 
 
\t <select name="status" class="form-control"[(ngModel)]="status.status"> 
 
\t \t <option *ngFor="let s of listStatus" [selected]="s.id === status.status" [value]="s.id">{{s.text}}</option> 
 
\t </select> 
 
</div> 
 
<div class="form-group" *ngIf="status.status === 1"> 
 
\t <label>Second select</label> 
 
\t <select name="blockLevel" class="form-control" [(ngModel)]="status.blockLevel"> 
 
\t \t <option *ngFor="let s of listBlockedLevel" [selected]="s.id === status.blockLevel" [value]="s.id">{{s.text}}</option> 
 
\t </select> 
 
</div>

在component.ts值正確更新。我試圖使用{{status.status}}顯示值,並且該值不會更改。

任何人都可以幫助我嗎?

解決方案

我使用ChangeDetectorRef解決我的問題。在第一種選擇我使用的方法來更新值

<select name="status" class="form-control" [ngModel]="status.status" (ngModelChange)="setStatus($event)">

和在TS組分i在部件的構造我用使用此

public setStatus(event: any) { 
 
    this.status.status = event; 
 
    this.ref.detectChanges(); 
 
}

這要導入ChangeDetectorRef

private ref: ChangeDetectorRef

回答

0

的選擇輸入部件改變從類型號碼的ID爲字符串。

選項1
對於第二個div,使用下列*ngIf選項之一:

*ngIf="status.status === 1 || status.status === '1'"

*ngIf="status.status == 1"

Working Plunker 1

選項2(推薦)
如果你不喜歡的選擇輸入改變id爲字符串的想法,你可以使用[ngValue]代替[value]挽救了整個status對象本身,然後id使用status.id參考。

Working Plunker 2

+0

仍然沒有工作,我嘗試使用顯示該值這個'{{status.status}}'但價值並沒有改變,它仍然初值 –

+0

我已經更新了我的答案與兩個工作的猛虎。在這兩種情況下,我都將更新後的值記錄到控制檯。它似乎工作正常。試着比較一下你的代碼,看看你是否錯過了任何東西。 – CodeWarrior

+0

第一plunker是隻用''===改爲''==我 – CodeWarrior