如何删除/销毁角度2+模板中的observable

时间:2017-07-14 14:42:03

标签: angular rxjs subject

我在角度4组件中有一个可观察的(或主题),我在模板中使用async管道,如下所示:

<div *ngIf="(orderObservable | async) as order; else noOrder ">
    The active order was created at {{ order.created_at }}
</div>
<ng-template #noOrder>
    There is no active order at the moment. Sorry. 
</ng-template>

只要订单不存在,或者通过HTTP调用检索,它就像魅力一样。在代码中,这看起来像这样:

this.orderObservable = OrderService.getActive();

如果此调用返回带有订单的observable,它将显示在模板中。如果没有,则显示#noOrder模板。

现在我的问题是:如果我将observable更改为主题,并且当前活动的订单不再存在(即因为它已提交或关闭),是否有任何方法可以删除主题,或者将某些内容传递给主题subject,所以模板显示#noOrder模板而不是显示可观察内容的模板后显示后者?

1 个答案:

答案 0 :(得分:1)

SubjectObservable所以它的工作方式相同。您只需要调用complete()告诉模板不再有数据,因此会触发其他条件。

this.subject = new Subject();
if(data) {
     this.subject.next(data);
}
this.subject.complete();

在上面的示例中,始终会调用complete()。当您不尝试流式传输一系列项目时,这是一种很好的做法。该示例仅在值存在时才会发出值。

  

注意:如果在调用next时没有订阅者。没人会收到数据。如果您知道在致电next后该模板会呈现,则可能需要使用ReplaySubject。它排出了最后的第n项。