如何删除/销毁角度2 +模板中的观察值
问题描述:
我有一个可观察的(或主题)角4组件,我在模板中使用async
管道,如下所示:如何删除/销毁角度2 +模板中的观察值
<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();
如果这个调用返回一个可观察的命令,它就会显示在模板。如果没有,则显示#noOrder模板。
现在我的问题是:如果我将observable更改为主题,并且当前活动的订单不再存在(即,因为它已提交或关闭),是否有任何方法可以删除主题或传递某些内容主题,所以模板显示#noOrder模板,而不是显示可观察内容的模板,在它显示后者之后?
答
Subject
是Observable
,所以它的工作原理是一样的。您只需拨打complete()
即可告诉模板没有更多数据出现,因此会触发其他条件。
this.subject = new Subject();
if(data) {
this.subject.next(data);
}
this.subject.complete();
在上例中总是调用complete()
。当您不试图流式传输一系列项目时,这是一种很好的做法。该示例仅在该值存在时发出值。
注意:如果当时没有用户,则调用
next
。没有人会收到这些数据。如果您知道在致电next
后模板将会呈现,您可能需要使用ReplaySubject
。它发出最后的第n个项目。
感谢您的回复。但是这对我来说并不适用,即使主题是完整的,模板仍会显示通过主题最后发生的任何内容。 –
@ R.Wenger你可以在第一个observable完成后使用'exhaust'操作符发出'false'值。 'Observable.of(this.subject,假).exhaust()' – cgTag