如何在嵌套组件中只执行一次订阅ngOnInit。

问题描述 投票:0回答:1

我有两个组件。CreateComment和DisplayComment。DisplayComment组件有自己的嵌套,用于显示线程评论。

现在,每当我从CreateComment组件中创建一个评论时,我都会调用CommentService中的一个主题来发出一个事件。这个主题在DisplayComment组件中被订阅,我将评论推送到要渲染的评论数组中。

由于我有嵌套组件,这个订阅被多次调用(根据线程评论数)。

谁能告诉我是否有什么方法可以限制DisplayComment方法的订阅只执行一次?

angular angular2-services subscription
1个回答
0
投票

如果你需要在一定数量的排放上完成订阅,你可以看看RxJS take 操作符。

ngOnInit() {
  this.someService.someObservable.pipe(
    take(1)
  ).subscribe(
    response => {
      // do something
    }
  );
}

您也可以将参数增加到您希望在订阅完成前发出的值的数量。对于 take(1) 在发出一个值后,就会完成订阅。

还有一个RxJS first() 运营商。见 此处 为不同 take(1)first().

© www.soinside.com 2019 - 2024. All rights reserved.