2017-03-13 3 views
4

Ich habe das Tour of Heroes-Tutorial verfolgt und bin gerade dabei, das Projekt zu ändern. Mein Projekt wird viele Uhren und Timer haben, und meine erste Aufgabe ist es, eine Uhr zu machen, die die UTC-Zeit anzeigt. Mit dem MomentModule, ich bin in der Lage, den Zeitpunkt der Seite zu laden anzuzeigen:Aktualisierung der Angular2-Uhr jede Sekunde

<p>{{ myDate | amDateFormat: 'ddd Do HH:mm:ss' }}</p> 

Allerdings ist es nicht in jeder Sekunde aktualisiert werden, wie ich es will.

Mein DashboardComponent sieht wie folgt aus:

export class DashboardComponent implements OnInit { 
    heroes: Hero[] =[]; 
    myDate: Date; 

    constructor(private heroService: HeroService) {} 

    ngOnInit(): void { 
     this.heroService.getHeroes() 
      .then(heroes => this.heroes = heroes); 

     this.utcTime(); 
    } 

    utcTime(): void { 
     setInterval(function() { 
      this.myDate = new Date(); 
      console.log(this.myDate); // just testing if it is working 
     }, 1000); 
    } 
} 

Also zunächst einmal ist es eine gute Idee, neue Datum zu erstellen(); jede Sekunde? Wie auch immer, gibt es eine Möglichkeit, die Zeit in meiner Ansicht jede Sekunde durch etwas wie eine beobachtbare oder ähnliche zu aktualisieren? Wie ich schon sagte, ich werde eine Menge Timer und Uhren auf meiner Seite haben, wenn es fertig ist. Vielen Dank!

+0

Sie können meine Plunker Beispiel hier unter http: //plnr.co/HaTd8q, ich benutze rxjs, um die Timer-Bibliothek zu implementieren, Quelle ist in GitHub https://github.com/J-Siu/ng2-simple-timer –

Antwort

10

Sie müssen nur arrowfunction verwenden, anstatt eine traditionelle function callback Syntax verwenden, wie unten dargestellt,

setInterval(() => {   //replaced function() by()=> 
    this.myDate = new Date(); 
    console.log(this.myDate); // just testing if it is working 
}, 1000); 
+0

Vielen Dank! Was das neue Date() in jeder Sekunde betrifft, wird das die Erinnerung verstopfen? Oder ist es ein vernünftiger Weg, die Zeit zu verfolgen? – Christian

+0

Dies ist eine traditionelle Art von JavaScript/Typoskript. Sie können 'Rxjs' Bibliothek für eine bessere Implementierung verwenden. – micronyks

+0

Der Grund, dass dies das Problem behebt, ist, dass bei einem 'traditionellen Callback' der Wert von 'this' nicht das übergeordnete Objekt ist, sondern stattdessen 'window' ist. Es ist also so, als würden Sie 'window.myDate' erstellen. Das Hinzufügen der Pfeilfunktion ermöglicht es dem Compiler,' this' durch '_this' zu ersetzen, das eine Referenz auf das übergeordnete Objekt ist (das Objekt, das die Eigenschaft' myDate' enthält) –

-1

es funktioniert:

ngOnInit() { 
    this.todayDate = setInterval(() => { 
     this.todayDate = new Date(); 
    }, 1000); 
} 
Verwandte Themen