Нет необходимости реализовывать setInterval
с Rx.
Вот еще одна опция с Observable.interval
, которая создает Observable, который выдает новое значение через заданный интервал, что именно то, что вы хотите сделать:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/interval';
import 'rxjs/add/operator/map';
@Injectable()
export class ClockService {
getClock(): Observable<Date> {
return Observable.interval(1000).map(() => new Date());
}
}
Посмотреть в StackBlitz
Observable.interval()
выдаст серию целых чисел 1, 2, 3, ...
, значение которых вы просто отбрасываете (() =>
) и заменяете на Date
, используя .map()
.
Вы можете оставить свой HeaderComponent
без изменений.
Примечание: я удалил присвоение this.mydate
, потому что оно не кажется необходимым. Я заметил, что многие люди, переходящие в angular, создают ненужные промежуточные переменные-члены вне рефлекса, когда достаточно чисто функционального решения. Если я был слишком самонадеян и вам это нужно, вы всегда можете вернуть его обратно.
Вам также не нужен пустой constructor
в Angular, поэтому я тоже убрал его.
Вам нужно нужны еще два import
с.