gpt4 book ai didi

angular - 如何删除/销毁 Angular 2+ 模板中的可观察对象

转载 作者:太空狗 更新时间:2023-10-29 18:25:05 25 4
gpt4 key购买 nike

我在 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>

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

this.orderObservable = OrderService.getActive();

如果此调用返回一个带有订单的可观察对象,它将显示在模板中。如果没有,则会显示 #noOrder 模板。

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

最佳答案

Subject 是一个 Observable 所以它的工作原理是一样的。您只需调用 complete() 来告诉模板没有更多数据到来,因此触发 else 条件。

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

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

Note: If there are no subscribers at the time next is called. No one will receive the data. If you know the template will render after you call next you might want to use ReplaySubject instead. Which emits the last n'th items.

关于angular - 如何删除/销毁 Angular 2+ 模板中的可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45105755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com