我创建了 Angular 7 应用程序,它使用一个非常大的外部库。除了来自外部来源的事件之外,我已将所有事情都成功连接起来。
我在外部源上有一个事件侦听器,可以触发并将数据发送到我的 Angular 应用程序。
externalApp.event((data)=>{
this.externalMonitorService.newData(external.data)
});
效果很好。
该函数然后使用BehaviorSubject并发出数据
newData(data){
this.mySubject.next(data);
}
这也很好用。
我可以在任何组件中订阅此内容,并且我会得到更改,它工作正常。
但是,在我的模板中,我无法使用异步管道,因为它无法检测到更改。我必须
ChangeDetectorRef
并更新变量,然后调用 detectorChanges。
我不想担心这个订阅,必须在每个组件中实现这个逻辑,这非常嗯......反应性破坏。
我是否遗漏了 Angular 深处我不知道的东西? Angular 有没有一种方法,也许是 NgZone,我可以调用一些东西,让 Angular 知道,这些数据来自外部源,将其视为更改,因此我不必在任何地方实现这个逻辑。
也许您应该注入 ngZone 并将调用包装到其
run
方法中。
import { NgZone } from '@angular/core';
constructor(
private ngZone: NgZone
) {}
this.ngZone.run(() => this.externalMonitorService.newData(external.data));