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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Angular 核心/课时/表单
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综合练习

表单

模板驱动 vs 响应式 FormGroup。

35 分钟

表单

Angular 提供 模板驱动 与 响应式 两套表单 API。B 端后台(与 Vue 3 核心 管理页类似)复杂校验多用 Reactive Forms;简单场景可用模板驱动 ngModel。

学习目标

  • 对比 Template-driven 与 Reactive Forms
  • 用 FormBuilder 构建 FormGroup
  • 做同步/异步校验与错误展示

核心内容

响应式表单(推荐)

import { Component, inject } from "@angular/core";
import { ReactiveFormsModule, FormBuilder, Validators } from "@angular/forms";

@Component({
  selector: "app-track-form",
  standalone: true,
  imports: [ReactiveFormsModule],
  template: `
    <form [formGroup]="form" (ngSubmit)="submit()">
      <input formControlName="title" placeholder="课程标题" />
      @if (form.controls.title.invalid && form.controls.title.touched) {
        <span class="error">标题必填</span>
      }
      <input formControlName="slug" placeholder="slug" />
      <button type="submit" [disabled]="form.invalid">保存</button>
    </form>
  `,
})
export class TrackFormComponent {
  private fb = inject(FormBuilder);

  form = this.fb.nonNullable.group({
    title: ["", [Validators.required, Validators.minLength(2)]],
    slug: ["", [Validators.required, Validators.pattern(/^[a-z0-9-]+$/)]],
  });

  submit() {
    if (this.form.invalid) return;
    console.log(this.form.getRawValue());
  }
}

模板驱动(速览)

<input [(ngModel)]="title" name="title" required #t="ngModel" />
<span *ngIf="t.invalid && t.touched">必填</span>

需在 imports 加入 FormsModule。双向绑定类似 Vue 的 v-model。

对比

Reactive FormsTemplate-drivenVue
模型FormGroup 对象模板 ngModelv-model
校验Validators 函数模板指令rules 对象
测试易单测需 DOM类似 reactive
适用复杂 B 端简单字段两者皆有

表单值类型可定义 interface TrackForm(TypeScript 核心),与后端 DTO 对齐。

练习

  • 为 slug 加自定义校验:禁止 admin 关键字
  • 提交时调用 TrackService createTrack

小结

复杂表单用 FormGroup + Validators;模板驱动适合快速原型。 下一课 RxJS。

加载本节练习…
← 上一课Router下一课 →RxJS 入门