2017-03-07 23 views
1

我在組件中使用DatePipe將時間戳轉換爲可讀表達式。但是,一旦文件被加載,我得到的例外:Angular 2 - 日期管道異常:檢查後表達式已更改

例外:http://localhost:3000/app/interest/user-interest.component.html:15:15錯誤造成的:表達式檢查後發生了變化。以前的值:'6бер。 2017' 年。當前值:'5бер。 2017' 年。

請問誰能解釋一下這裏發生了什麼事。這是基本的代碼:

用戶interest.component.html

<p md-line>{{getFolderLastLearningSessionDate(folder.learningSessions)}}</p> 

用戶interest.component.ts

getFolderLastLearningSessionDate(sessions:Array<LearningSession>):string { 
    if (sessions) 
     try { 
     return this.learningSessionService.getLearningSessionDate(this.learningSessionService.getLastLearningSession(sessions)); 
     } catch (ex) { 
     console.log(ex); 
     } 
    else return "Folder have not bean studied yet"; 
    } 

學習sessions.service.ts

public getLearningSessionDate(session:LearningSession):string { 
    let datePipe = new DatePipe("uk-UA"); 
    return datePipe.transform(session.sessionDate); 
    } 
public getLastLearningSession(sessions:Array<LearningSession>):LearningSession { 
    if (sessions) { 
     return sessions.sort(
     (session1:LearningSession, session2:LearningSession) => { 
      return session2.sessionDate.getDate() - session1.sessionDate.getDate(); 
     }).shift(); 
    } 
    else 
     throw new Error("folder is not studied yet"); 
    } 

回答

3

如果更改檢測導致模型發生更改,則會引發此錯誤。

在devMode Angular中,在第一個變量檢測之後會進行額外的變更檢測,並檢查模型是否在第一次和第二次之間發生變化。如果確實如此,那麼您會收到您提到的錯誤消息。

你的情況,這可能是由綁定到在後續調用

{{getFolderLastLearningSessionDate(folder.learningSessions)}} 

綁定的方法是有問題的,特別是如果後續調用可以返回不同的值(與不同的對象實例返回的值不同的方法引起的相同的屬性和相同的屬性值被認爲是不同的)。

因此,最好註冊一些事件處理程序,並在這樣的事件處理程序中更新類字段,並將其綁定到類字段。

相關問題