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

时间:2020-06-05 21:36:44

标签: angular angular2-services subscription

我有两个组件:CreateComment和DisplayComment。 DisplayComment组件本身嵌套在其中,用于显示主题注释。

现在,每当我从CreateComment组件创建评论时,就在CommentService中调用一个主题以发出事件。该主题正在DisplayComment组件中订阅,我在其中将注释推送到要呈现的注释数组。

由于我有嵌套的组件,因此此订阅被多次调用(根据线程注释数)。

有人可以让我知道是否可以将对DisplayComment方法的订阅执行限制为一次吗?

1 个答案:

答案 0 :(得分:0)

如果您需要订阅才能完成一定量的排放量,则可以研究RxJS take运算符。

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

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

还有一个RxJS first()运算符。有关take(1)first()之间的区别,请参见here

相关问题