angular – 在ngOnDestroy回调中完成Output()eventemitter
在我的角度组件的ngOnDestroy回调中为每个Output()EventEmitter调用complete()方法是一个好习惯吗?
这样,当组件被销毁时,对这些输出的任何订阅都将直接结束.在大多数情况下,我不必担心在父组件中取消订阅.你怎么看? 例 我有一个父组件,订阅子组件的输出事件. childCompoment.event.pipe( takeUntil(this.parentComponentDestroyed$),// end subscription when parent is destroyed ).subscribe((eventData: any) => { // do stuff }); } 现在,如果子组件被销毁,则不会自动结束我的父订阅.我必须等到父组件被自行销毁. 解决方法
好吧,我个人认为没有必要在@Output EventEmitter上调用complete().我是这么说的,因为我们应该从Child Component调用emit.
它类似于在HttpClient返回的Observable Subscription中调用unsubscribe,只要它被调用一次. 这是一个amazingly enlightening article by Ben Lesh谁是Rxjs领先.阅读本文将清楚说明何时取消订阅以及何时取消订阅. 你可以考虑在类似的行上调用complete()的想法. 更新: 当您在Parent Component Typescript类中使用ChildComponent时,您添加的示例展示了极为罕见的用例,可能使用ViewChild,并且在Parent Component中侦听了它的事件.在这种特殊情况下,我认为在ngOnDestroy中取消订阅非常重要. 但在大多数情况下,子组件的@Output事件通常由父组件中的处理程序监听.从儿童组件发射的事件通常掌握在我们手中.如果子组件被销毁,那么它将不会真正触发任何事件,因此我并不认为有必要在ngOnDestroy中显式调用完成或取消订阅. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |