异步操作符和订阅 observable 有什么区别?

dot*_*pro 2 observable rxjs typescript ngrx angular

我是 Angular、RxJs 和 Ngrx 的新手

我知道我们订阅了一个 Observable 并观察变化。我在 Ngrx入门中遇到了这段代码

<div>Current Count: {{ count$ | async }}</div>
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*and 5

异步管道更干净

data$ = this.service.data$;
Run Code Online (Sandbox Code Playgroud)

并在模板中

{{data$ | async}}
Run Code Online (Sandbox Code Playgroud)

与必须管理订阅。

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

ngOnDestroy() {
  this.sub.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)

并在模板中

{{data}}
Run Code Online (Sandbox Code Playgroud)


Pac*_*ace 2

正如@jonrsharpe 提到的,这并没有真正的不同。在底层,异步管道将创建一个订阅并存储最新的值,这与您想要订阅并显示结果时需要执行的操作相同。

async当组件(指令)被销毁时,管道还将负责取消订阅可观察对象。

在变化检测方面它可能稍微更有效,但我不确定。

然而,大多数情况下,它只是为了方便而使用。使用async管道的代码少于创建组件变量并在组件onInit或构造函数中订阅它,然后跟踪订阅以取消订阅的代码。

  • 如果您更改组件以使用changeDetection:ChangeDetectionStrategy.OnPush,那肯定会更有效 (2认同)