CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Angular 路线图实战/课时/RxJS 与 Signals
RawBlame
课时目录12 节

Angular 路线图实战

  1. 01Angular 入门与 CLI
  2. 02组件与生命周期
  3. 03模板与数据绑定
  4. 04指令与管道
  5. 05表单
  6. 06服务与依赖注入
  7. 07HttpClient 与安全
  8. 08Router 与懒加载
  9. 09RxJS 与 Signals
  10. 10SSR、测试与 i18n
  11. 11NgModule 与库
  12. 12综合练习

RxJS 与 Signals

Observable、Operators、Signals、Zoneless。

35 分钟

RxJS 与 Signals

路线图「RxJS」与「Signals」:HttpClient、Router、表单 valueChanges 均返回 Observable;Angular 16+ Signals 提供更细粒度的响应式状态,新应用可配合 Zoneless 减少变更检测开销。

学习目标

  • 理解 Observable 与 Promise 的差异
  • 使用 map、switchMap、debounceTime、catchError
  • 用 Signals 与 async 管道简化模板订阅

核心概念

Observable 与操作符

import { of } from "rxjs";
import { map, switchMap, debounceTime, catchError } from "rxjs/operators";

this.route.paramMap.pipe(
  switchMap((params) => this.trackService.getBySlug(params.get("slug")!)),
  catchError(() => of(null)),
).subscribe((track) => (this.track = track));

switchMap 取消未完成的上一次请求,防路由快速切换竞态。搜索框常用 debounceTime(300) + switchMap。

Signals

import { signal, computed, effect } from "@angular/core";

export class SearchComponent {
  keyword = signal("");
  tracks = signal<Track[]>([]);
  filtered = computed(() =>
    this.tracks().filter((t) => t.title.includes(this.keyword())),
  );

  constructor() {
    effect(() => console.log("keyword:", this.keyword()));
  }
}

模板:{{ keyword() }}、@for (t of filtered(); track t.slug)。Signals 类似 React useState + useMemo 的组合,但框架原生集成。

与 React/Next 对照

Angular RxJSAngular SignalsReact
异步流Observablesignal + effectPromise / async
派生状态pipe(map)computed()useMemo
模板订阅async pipe直接 () 调用JSX 内 state

存量 Angular 项目 RxJS 无处不在;新项目可 Signals 为主、RxJS 管 HTTP 流。

练习

  • 搜索框 debounceTime(300) + switchMap 调 API
  • 用 Signal 重构列表过滤,去掉手动 subscribe
  • 小结

    Observable 管异步流,Signals 管细粒度状态。 下一课 SSR、测试与 i18n。

    加载本节练习…
    ← 上一课Router 与懒加载下一课 →SSR、测试与 i18n