2016-08-03 20 views
2

改變以成角度的2個應用程序我寫應用凍結,我必須經由[(ngModel)]綁定到控制器的一個領域,select元件:角2:當模型是從選擇輸入

<select [(ngModel)]="dateInfo.year" class="form-control"> 
    <option *ngFor="let year of getYearList()" [value]="year">{{year}}</option> 
</select> 

dateInfo是在是指包含在一個服務一個DateInfo對象所述控制器的屬性稱爲DateService

@Injectable() 
export class DateService { 
    public dateInfo: DateInfo = { 
    year: 2016 
    } 
} 

DateInfo對象本身是一個簡單的接口打字原稿噸帽子只是存儲年份:

export interface DateInfo { 
    year: number 
} 

我使用這個接口的原因是爲了改變year傳播到使用DateService,按照the first answer to this question所有組件。

由於某些原因,當模型從select元素更改時,整個應用程序會凍結(在Chrome和Edge中進行測試)。我已經做了一個蹲下來說明問題here

在此先感謝!

回答

1

問題是由getYearList()爲每個調用返回一個新的數組實例造成的。每次Angulars更改檢測運行時,它都會檢測到更改,因爲每次都會得到一個新陣列。 我不知道爲什麼你沒有得到一個「表達發生了變化,因爲它是最後一次檢查認爲」

緩存結果修復該問題http://plnkr.co/edit/UKA35jIa9v6jFfrbJJuz?p=preview

這爲什麼它通常是不好的做法,呼籲從模板的方法。而是將方法調用的結果分配給屬性,並將其綁定到此屬性。

+0

對不起,如果我沒有解釋清楚,但我的目標是每次生成一個新的年份列表,每年'''改變,使'年份'在列表中。 'getYearList()'方法必須在每次'year'改變時返回一個新數組。 –

+0

我看到了,沒有正確調查關閉。 http://plnkr.co/edit/UKA35jIa9v6jFfrbJJuz?p=preview –

+0

這很好,謝謝! –