【问题标题】:Change Detection and Events from outside of Angular来自 Angular 外部的变更检测和事件
【发布时间】:2020-01-05 13:37:58
【问题描述】:

我创建了一个使用非常大的外部库的 Angular 7 应用程序。除了来自外部来源的事件外,我已经成功完成了所有事情。

我在那个外部源上有一个事件监听器,它触发并将数据发送到我的 Angular 应用程序。

externalApp.event((data)=>{
  this.externalMonitorService.newData(external.data)
});

效果很好。

此函数然后使用 BehaviorSubject 并发出数据

newData(data){
  this.mySubject.next(data);
}

这也很好。

我可以在任何组件中订阅它并且我得到更改,它工作正常。

但是,在我的模板中,我不能使用异步管道,因为它不会检测到更改。我必须ChangeDetectorRef 并更新一个变量,然后调用detectChanges。

我不想担心这个订阅,必须在每个组件中实现这个逻辑,这非常 ummmm...reactive 打破

我是否遗漏了一些我不知道的 Angular 深处的东西?有没有一种角度的方法,也许是 NgZone,我可以调用一些东西让 Angular 知道,这些数据来自外部源,将其视为更改,因此我不必在任何地方实现这个逻辑。

【问题讨论】:

  • 您能否详细说明一下这个外部库的作用以及为什么它在您的应用程序外部?
  • 顺便问一下,您是否在该组件中指定了任何changeDetectionStrategy
  • 你能告诉 use 更多关于你的 BehaviorSubject 的信息吗?请注意,如果您通过 null 初始化您的 behaviorSubject,则会从异步管道劫持 changeDetection。

标签: angular rxjs


【解决方案1】:

也许你应该注入 ngZone 并将调用包装到它的 run 方法中。

this.ngZone.run(() => this.externalMonitorService.newData(external.data));

【讨论】:

  • 工作就像一个魅力,我想我是时候接受我必须潜入ngzone了,我可耻地避开了它。
猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2021-01-14
相关资源
最近更新 更多