Справочная информация:
У меня есть несколько компонентов в приложении Angular 6, которые необходимы для отображения текущего времени (чч: мм).
Изначально они были реализованы с использованием setInterval
с привязкой this.now
в представлении:
setInterval(() => {
this.now = new Date();
}, 1000);
Естественно, это приводит к тому, что обнаружение изменений запускается каждую секунду, что бесполезно, поскольку значение будет обновляться только раз в минуту. Я могу улучшить это, запустив setInterval
за пределами ngZone
и вручную запустив обнаружение изменений, если будет перенесена минута.
Вопрос:
Я пытаюсь реализовать наблюдаемый поток дат, который каждую минуту генерирует новое значение. Это то, что я делаю далеко ...
timer(0, 1000)
.pipe(
map(() => new Date()),
distinctUntilChanged((a: Date, b: Date) => a.getMinutes() === b.getMinutes()),
tap(date => console.log(date))
);
Новая дата отправляется раз в минуту, однако при подписке на этот поток обнаружение изменений Angular запускается каждую секунду. (Я подтвердил это, добавив ngDoCheck
к компоненту, который подписан).
Как я могу отложить обнаружение изменений, чтобы оно происходило только при появлении нового значения?