2017-10-17 99 views
0

在我的角度值我有一個選擇更改時區。 this.userTimeZone是我的組件中的一個對象。分配角度4中的初始值

{ 
AdjustmentRules:null 
BaseUtcOffset:"-04:30:00" 
DaylightName:"Venezuela Daylight Time" 
DisplayName:"(UTC-04:30) Caracas" 
Id:"Venezuela Standard Time" 
StandardName:"Venezuela Standard Time" 
SupportsDaylightSavingTime:false} 

我的選擇選項看起來是這樣的:

<select name="timeZones" [(ngModel)]="userTimeZone" (change)="setTimezoneId($event)" class="form-control"> 
    <option *ngFor="let time of timezones" [ngValue]="time">{{time.DisplayName}}</option> 
</select> 

我無法設置選擇的初始值。

雖然userTimeZone有一個值,但select在加載時顯示空白。

如果我給userTimeZone.Id和[ngValue] =「time.id」選項被選中,但在更改時返回的值只是id而不是整個對象。

我希望整個對象,當選擇選項更改時還設置選擇的初始值。

不知道什麼是錯here.Please指南

感謝

回答

0

那麼下面就是我所做的

<select name="timeZones" [(ngModel)]="userTimeZone.Id" (change)="setTimezoneId($event)" class="form-control"> 
     <option *ngFor="let time of timezones" [value]="time.Id"> {{time.DisplayName}} </option> 
</select> 

userTimeZone.Id將匹配time.Id和默認選項會得到選擇。

在變化方法中,我們從JSON基於該值過濾的對象

setTimezoneId(event:any) { 
      /*Filter object from the json */ 
      this.userTimeZone = this.timezones.filter(function (zone: any) { 
       return zone.Id == event.target.value; 
      })[0]; 
      console.log(this.userTimeZone); 
     } 
0

試試這個:

使用(ngModelChange)= 「setTimezoneId($事件)」,而不是(變更)=「setTimezoneId( $事件)」

<select name="timeZones" [(ngModel)]="userTimeZone" (ngModelChange)="setTimezoneId($event)" class="form-control"> 
    <option *ngFor="let time of timezones" [ngValue]="time">{{time.DisplayName}}</option> 
</select> 
0

您需要使用您的選項[attr.value],並確保你的選擇的值不是一個對象,你可以使用和串並然後在需要時與集合中的對象進行匹配。

檢查app.ts在這個例子:

https://plnkr.co/edit/gvc5bf50sgA57Y0YGRui