【问题标题】:How to move subscription logic from ngOnInit to ngOnChange如何将订阅逻辑从 ngOnInit 移动到 ngOnChange
【发布时间】:2020-12-29 08:42:22
【问题描述】:

这是一个关于 Angular 的更笼统的问题 - 我对它很陌生 - 是一个彻头彻尾的 React 书呆子。

我的任务是将逻辑移动到 ngOnChanges,涵盖我们应该订阅、保留现有订阅或取消订阅的每种情况。我该怎么做?

这是一些示例代码:

ngOnInit() {

    const obsValue$ = combineLatest([
        this.store.pipe(select(this.example1Selector.getData())),
        this.store.pipe(select(this.example2Selector.getData()))
    ]).pipe(
        tap(([important1, important2]) => {
            this.important1 = important1;
            this.important2 = important2;
        })
    );
}

我想将此代码移动到 ngOnChange 并仅在需要时订阅并在必要时保留它并在必要时取消订阅。我该怎么做?

【问题讨论】:

  • 问题一 - 为什么你认为你不能?问题二——你为什么要这样做?这是一个非常广泛的问题,您没有提供任何细节
  • 您的问题需要更多细节,目标是什么?如果可以,请提供更多信息并显示一些代码。如何处理订阅视情况而定。如果您的组件是一个孩子,我根本不会“手动”订阅,而是使用异步管道。原则上,将订阅从 ngOninit 转移到 ngOnchanges 应该不是问题,但也没有任何意义。
  • 我更新了一些信息,以便更清楚我想要实现的目标。

标签: angular rxjs angular2-observables


【解决方案1】:

您应该取消订阅不再需要的订阅,方法是调用 Subscription#unsubscribe(要求您保存 Subscriptions)或以结束所有订阅的 Subject#complete 结束事件流 - 但这并不总是适用。

不这样做可能会导致资源泄漏。 (这取决于实际的 observable 以及它是否作为某个点关闭)

我通常也会在 ngOnDestroy 生命周期挂钩中取消订阅/完成。

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2012-01-26
    • 2019-10-25
    • 2017-04-13
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多