2017-07-26 22 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