加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 在ngOnDestroy回调中完成Output()eventemitter

发布时间:2020-12-17 17:12:00 所属栏目:安全 来源:网络整理
导读:在我的角度组件的ngOnDestroy回调中为每个Output()EventEmitter调用complete()方法是一个好习惯吗? 这样,当组件被销毁时,对这些输出的任何订阅都将直接结束.在大多数情况下,我不必担心在父组件中取消订阅.你怎么看? 例 我有一个父组件,订阅子组件的输出事
在我的角度组件的ngOnDestroy回调中为每个Output()EventEmitter调用complete()方法是一个好习惯吗?
这样,当组件被销毁时,对这些输出的任何订阅都将直接结束.在大多数情况下,我不必担心在父组件中取消订阅.你怎么看?

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

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

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

解决方法

好吧,我个人认为没有必要在@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中显式调用完成或取消订阅.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读