ngOnDestroy回调中完整的Output()事件发射器

时间:2018-11-16 17:07:04

标签: angular

在我的角度组件的ngOnDestroy回调中为每个Output()EventEmitter调用complete()方法是一种好习惯吗? 这样,在销毁组件时,对这些输出的任何订阅都将直接结束。在大多数情况下,我不必担心不再订阅父组件。你觉得呢?

示例

我有一个父组件,该子组件订阅子组件的输出事件。 我通常这样做:

childCompoment.event.pipe(
    takeUntil(this.parentComponentDestroyed$), // end subscription when parent is destroyed
  ).subscribe((eventData: any) => {
    // do stuff
  });
}

现在,如果子组件被销毁,则不会自动终止我的父订阅。我必须等到父组件被销毁为止。 如果我在子组件的OnDestroy回调中调用event.complete(),则我的订阅将在子组件被销毁后立即终止。 在那种情况下最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

好吧,我个人认为并没有必要在complete() @Output上调用EventEmitter。我之所以这样说,是因为我们需要从子组件中调用emit

这与不调用unsubscribe返回的Observable Subscription上的HttpClient只是一次而已。

以下是configured email to be optional的Rxjs负责人。阅读本文将使您清楚何时unsubscribe,何时不该。

您可以考虑在相似的行上调用complete()的想法。

更新:

当在父组件Typescript类中使用ChildComponent时(可能使用ViewChild),并且您在父组件中侦听了事件,因此您添加的示例展示了一个极为罕见的用例。在这种特定情况下,我认为在unsubscribe中使用ngOnDestroy很重要。

但是在大​​多数情况下,子组件的@Output事件通常由父组件中的处理程序侦听。从子组件触发的事件通常在我们手中。而且,如果子组件被销毁,那么它实际上不会触发任何事件,因此我真的不认为需要在complete中显式调用unsubscribengOnDestroy。 / p>