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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Angular 核心/课时/Signals 新特性
RawBlame
课时目录12 节

Angular 核心

  1. 01Angular 是什么
  2. 02CLI 与项目结构
  3. 03组件与模板
  4. 04指令
  5. 05服务与依赖注入
  6. 06HttpClient
  7. 07Router
  8. 08表单
  9. 09RxJS 入门
  10. 10Signals 新特性
  11. 11Angular vs React/Vue
  12. 12综合练习

Signals 新特性

signal、computed、与 Zone.js 趋势。

25 分钟

Signals 新特性

Angular 16+ 引入 Signals:细粒度响应式原语,API 类似 Vue 3 核心 的 ref / computed。长期趋势是 Zone.js 可选化 + Signals 驱动变更检测,与 React 19 方向趋同。

学习目标

  • 使用 signal()、computed()、effect()
  • 在组件模板绑定 Signal
  • 理解 Signals 与 RxJS 的分工

核心内容

基础 Signal

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

@Component({
  selector: "app-counter",
  standalone: true,
  template: `
    <p>计数:{{ count() }}</p>
    <p>双倍:{{ doubled() }}</p>
    <button (click)="increment()">+1</button>
  `,
})
export class CounterComponent {
  count = signal(0);
  doubled = computed(() => this.count() * 2);

  increment() {
    this.count.update((n) => n + 1);
  }
}

模板中 Signal 像函数一样 调用 count() 读取值;更新用 set / update。

输入 Signal(Angular 17.1+)

@Component({ /* ... */ })
export class TrackBadgeComponent {
  slug = input.required<string>();
  label = computed(() => this.slug().replace(/-/g, " "));
}

替代部分 @Input() 场景,类型更安全(TypeScript 核心)。

与 RxJS 桥接

tracks = toSignal(this.trackService.list(), { initialValue: [] as Track[] });

新代码优先 Signals 管 UI 状态;HTTP 流仍用 RxJS + toSignal。

练习

  • 用 computed 过滤 track 列表(按 keyword signal)
  • 把 HttpClient 结果经 toSignal 绑到模板

小结

Signals = 细粒度响应式;与 RxJS 并存是 modern Angular。 下一课框架对比。

加载本节练习…
← 上一课
RxJS 入门
下一课 →Angular vs React/Vue