Angular 如何删除/销毁角度2+;模板

Angular 如何删除/销毁角度2+;模板,angular,rxjs,subject,Angular,Rxjs,Subject,我在angular 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

我在angular 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>
this.orderObservable = OrderService.getActive();
如果此调用返回一个带有顺序的可观察对象,它将显示在模板中。如果没有,则显示#noOrder模板


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

主题
是一个可观察的,因此它的工作原理相同。您只需调用
complete()
,告诉模板不再有数据,从而触发else条件

this.subject = new Subject();
if(data) {
     this.subject.next(data);
}
this.subject.complete();
在上面的示例中,始终调用
complete()
。这是一个很好的做法,当你不试图流一系列的项目。该示例仅在值存在时发出该值

注意:如果此时没有订户,则调用下一个。没有人会收到数据。如果您知道在调用
next
后将呈现模板,则可能需要使用
ReplaySubject
。它发出最后第n个项目


谢谢你的回复。但这对我来说不起作用,即使主题已完成,模板仍会显示上次通过主题的内容。@R.Wenger您可以在第一次观察完成后,使用
排气
操作符发出
observed.of(this.subject,false).detain()