2017-03-07 11 views
1

Ich benutze DatePipe in meiner Komponente, um den Zeitstempel in einen lesbaren Ausdruck umzuwandeln. Aber sobald das Dokument geladen ist bekomme ich die Ausnahme:Angular 2 - Ausnahme für Datums-Pipe: Der Ausdruck hat sich nach der Überprüfung geändert

AUSNAHME: Fehler bei http://localhost:3000/app/interest/user-interest.component.html:15:15 verursacht durch: Ausdruck hat sich geändert, nachdem geprüft wurde. Vorheriger Wert: '6 бер. 2017 '. Aktueller Wert: '5 бер. 2017 '.

Kann mir bitte jemand erklären, was hier vor sich geht. Hier ist die grundlegende Code:

benutzer interest.component.html

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

benutzer 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"; 
    } 

Lern ​​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"); 
    } 

Antwort

3

Dieser Fehler wird ausgelöst, wenn die Änderungserkennung eine Änderung im Modell verursacht.

In devMode Angular ändert sich eine zusätzliche Änderungserkennung nach der ersten und überprüft, ob das Modell zwischen der ersten und zweiten Drehung gewechselt hat. Wenn dies der Fall ist, erhalten Sie die Fehlermeldung, die Sie erwähnt haben.

In Ihrem Fall ist dies wahrscheinlich verursacht durch ein Verfahren Bindung, die unterschiedliche Werte für nachfolgende Aufrufe gibt

{{getFolderLastLearningSessionDate(folder.learningSessions)}} 

Verfahren Bindung ist problematisch, vor allem, wenn nachfolgende Aufrufe unterschiedliche Werte zurückgeben kann (unterschiedliche Objektinstanzen mit der gleiche Eigenschaften und gleiche Eigenschaftswerte werden als unterschiedlich angesehen).

Es ist daher besser, einen Event-Handler zu registrieren und ein Klassenfeld in einem solchen Event-Handler zu aktualisieren und stattdessen an das Klassenfeld zu binden.

Verwandte Themen