异步运算符和订阅可观察值有什么区别?

时间:2019-05-06 20:15:45

标签: angular typescript rxjs observable ngrx

我是Angular和RxJs和Ngrx的新手

我知道我们订阅了一个Observable并注意更改。我在Ngrx getting started

中遇到了这段代码
<div>Current Count: {{ count$ | async }}</div>

问题是AsyncPipe到底是什么,它与订阅Observable有什么不同?什么时候使用,什么时候使用?

2 个答案:

答案 0 :(得分:2)

异步管道更干净

data$ = this.service.data$;

和模板中

{{data$ | async}}

必须管理订阅。

ngOnInit() {
  this.sub = this.service.data$.subscribe(data => { this.data = data });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}

和模板中

{{data}}

答案 1 :(得分:1)

正如@jonrsharpe所提到的,并没有什么不同。在后台,异步管道将创建一个预订并存储最新的值,如果您要预订并显示结果,则需要执行此操作。

class Banana extends Fruit implements FruitWeight { public double payFruit() {...} } class Watermelon extends Fruit implements FruitVolume { public double payFruit() {...} } //etc. 管道还将在组件(指令)被销毁时避免从可观察对象中退订。

在变更检测方面,可能效率更高,但我不确定。

然而,大多数情况下,它只是为了方便使用。使用interface FruitUnit extends IFruitPayment{ double getQuantityPrice(); default double payFruit() {return this.getQuantityPrice();} } 管道比创建组件变量并在组件的async或构造函数中进行订阅,然后跟踪要取消订阅的订阅要少。