在我的角度组件的ngOnDestroy回调中为每个Output()EventEmitter调用complete()方法是一种好习惯吗? 这样,在销毁组件时,对这些输出的任何订阅都将直接结束。在大多数情况下,我不必担心不再订阅父组件。你觉得呢?
示例
我有一个父组件,该子组件订阅子组件的输出事件。 我通常这样做:
childCompoment.event.pipe(
takeUntil(this.parentComponentDestroyed$), // end subscription when parent is destroyed
).subscribe((eventData: any) => {
// do stuff
});
}
现在,如果子组件被销毁,则不会自动终止我的父订阅。我必须等到父组件被销毁为止。 如果我在子组件的OnDestroy回调中调用event.complete(),则我的订阅将在子组件被销毁后立即终止。 在那种情况下最好的方法是什么?
答案 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
中显式调用unsubscribe
或ngOnDestroy
。 / p>