async 管道
在模板中订阅,无需手动清理。
async 管道 是 CoddyKit 上的免费 Angular Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Angular Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Angular Academy 课程共包含 4 节课。
async 管道的作用
async 管道会在模板中订阅 Observable(或 Promise),渲染最近产生的值,并在组件销毁时自动取消订阅。
基本用法
在模板中直接绑定 observable,并通过 async 管道处理它。
@Component({
template: '<p>{{ message$ | async }}</p>'
})
export class HelloComponent {
message$ = of('Hello from RxJS');
}使用 async 渲染对象
它适用于任何产生的类型。可以与 json 或 date 等其他管道结合使用。
user$ = this.http.get('/api/me');
// template:
// <pre>{{ user$ | async | json }}</pre>避免多次订阅
每次使用 async 都会创建一个订阅。在同一个 observable 上多次使用它,会触发多次 HTTP 请求。请使用 as 语法,只订阅一次。
<!-- one subscription, reused as "user" -->
<div *ngIf="user$ | async as user">
<p>{{ user.name }}</p>
<p>{{ user.email }}</p>
</div>结合新的控制流
在现代 Angular 中,请将 @if 与 as 结合使用,以实现相同的单次订阅模式。
@if (user$ | async; as user) {
<p>{{ user.name }}</p>
<p>{{ user.email }}</p>
}等待期间为 Null
在首次产生值之前,async 会返回 null。请明确处理加载状态。
@if (data$ | async; as data) {
<list [items]="data" />
} @else {
<p>Loading...</p>
}无需手动取消订阅
该管道会在销毁时自动取消订阅,从而消除一大类内存泄漏。这就是它成为模板中使用 observables 的首选方式的原因。
切换 observables
如果绑定的 observable 引用发生变化,async 管道会自动取消对旧引用的订阅,并订阅新引用。
search(term: string) {
this.results$ = this.http.get('/api/search?q=' + term);
// async pipe swaps subscriptions for you
}async 管道与 BehaviorSubject
将 BehaviorSubject 服务与 async 管道结合,可以构建简洁的响应式用户界面,而无需手动编写订阅代码。
// service: readonly count$ = this.subject.asObservable();
// template: <span>{{ count$ | async }}</span>async 管道与 toSignal
两者都会自动管理订阅。async 管道存在于模板中;toSignal() 会将值作为 signal 引入组件代码。请根据所需使用值的位置进行选择。
import { toSignal } from '@angular/core/rxjs-interop';
user = toSignal(this.http.get('/api/me'));
// template: {{ user()?.name }}最佳实践总结
在组件中,优先使用 async 管道(或 toSignal),而不是手动订阅。使用 as 避免重复订阅,并始终处理初始的 null/加载状态。
快速检查
测试您对 async 管道的理解。
回顾:Async 管道
async 管道会在模板中订阅,并在销毁时清理。
- 将
as与 @if 或 *ngIf 结合使用,以只订阅一次。 - 首次产生值之前它会返回 null,请处理加载状态。
- 对于模板,它优于手动订阅。
您已完成 RxJS 基础课程。
常见问题解答
「async 管道」课时是免费的吗?
是的 — 「async 管道」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Angular Academy 课程的其余内容,请升级到 CoddyKit PRO。 Angular Academy 课程共包含 4 节课。
「async 管道」这节课中我会学到什么?
在模板中订阅,无需手动清理。 你通过在浏览器中直接运行的动手代码来练习 Angular Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Angular Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Angular Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「async 管道」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Angular Academy 课中编写并运行代码吗?
能。每节 Angular Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。