如何将订阅逻辑从 ngOnInit 移动到 ngOnChange

How to move subscription logic from ngOnInit to ngOnChange

这是一个关于 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 并仅在需要时订阅,必要时保留,必要时取消订阅。我该怎么做?

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

否则可能会导致资源泄漏。 (这取决于实际可观察​​到的以及它是否作为某个点关闭)

另外,我通常也会 unsubscribe/complete 在 ngOnDestroy 生命周期钩子中。