【发布时间】:2018-11-11 23:36:49
【问题描述】:
背景:
我的 Angular 6 应用程序中有许多组件需要显示当前时间 (hh:mm)。
这些最初是使用setInterval 实现的,this.now 绑定在视图中:
setInterval(() => {
this.now = new Date();
}, 1000);
自然,这会导致更改检测每秒运行一次,这是一种浪费,因为该值每分钟只会更新一次。我可以通过在ngZone 之外运行setInterval 来改进这一点,并在时间已过时手动触发更改检测。
问题:
我正在尝试实现每分钟发出一个新值的可观察日期流。这就是我目前所做的......
timer(0, 1000)
.pipe(
map(() => new Date()),
distinctUntilChanged((a: Date, b: Date) => a.getMinutes() === b.getMinutes()),
tap(date => console.log(date))
);
每分钟发出一次新日期,但是订阅此流会导致 Angular 的更改检测每秒运行一次。 (我通过向订阅的组件添加ngDoCheck 来确认这一点)。
如何推迟更改检测,使其仅在发出新值时发生?
【问题讨论】:
-
你想做什么?
-
变更检测通常发生在递归循环中
-
你试过
Observable.interval(1000)吗? -
对不起,如果不清楚:“我正在尝试实现一个可观察的日期流,它每分钟都会发出一个新值。”但是我只希望在发出值时触发更改检测,而不是在计时器触发时每 1000 毫秒触发一次。
-
在角度区域外运行并设置手动更改值:blog.angularindepth.com/…
标签: angular rxjs observable