游乐游手机版
首页/前端开发/文章详情

Angular 2 表单开发教程:数据绑定、验证与提交

时间:2026-08-31 14:11
本教程详细讲解如何在 Angular 2 中构建表单,涵盖项目初始化、模型定义、组件与模块配置、模板驱动表单的双向数据绑定、状态验证及表单提交。通过完整代码示例与步骤说明,帮助开发者快速掌握 Angular 表单的核心用法。

在 Angular 2 中构建表单需要结合组件、模板与表单模块,实现数据绑定、校验与提交流程。本文将按步骤演示如何从零搭建一个网站信息录入表单,涵盖模型定义、双向绑定、状态反馈与提交控制,帮助开发者快速掌握模板驱动表单的核心机制。

初始化项目与定义数据模型

首先准备 Angular 2 项目环境,可参考官方 TypeScript 环境配置指南,或直接下载基础源码。解压后将目录重命名为 angular-forms,并修改 angular-forms/package.json 中的 "name": "angular-quickstart""name": "angular-forms"。完成后执行 cnpm install 安装依赖。

接下来定义表单所需的数据模型。在 angular-forms/app 目录下创建 site.ts,包含三个必需字段(id、name、url)与一个可选字段(alexa):

export class Site {
  constructor(
    public id: number,
    public name: string,
    public url: string,
    public alexa?: number
  ) {  }
}

其中 public 声明的字段为公有属性,alexa? 的问号表示该字段为可选。

创建表单组件与根模块配置

Angular 表单由 HTML 模板与处理数据的组件两部分组成。在 angular-forms/app 目录下创建 site-form.component.ts

import { Component } from '@angular/core';
import { Site }    from './site';

@Component({
  moduleId: module.id,
  selector: 'site-form',
  templateUrl: 'site-form.component.html'
})
export class SiteFormComponent {
  urls = ['www.runoob.com', 'www.google.com',
            'www.taobao.com', 'www.facebook.com'];
  model = new Site(1, '菜鸟教程', this.urls[0], 10000);
  submitted = false;
  onSubmit() { this.submitted = true; }
  // TODO: 完成后移除
  get diagnostic() { return JSON.stringify(this.model); }
}

@Componentselectorsite-form,表示可通过 标签嵌入父模板。templateUrl 指向独立的 HTML 模板文件,diagnostic 用于调试时输出模型的 JSON 数据。

模板驱动表单依赖 FormsModule,需在根模块中引入。修改 app/app.module.ts

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule }   from '@angular/forms';
import { AppComponent }  from './app.component';
import { SiteFormComponent } from './site-form.component';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule
  ],
  declarations: [
    AppComponent,
    SiteFormComponent
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

修改根组件 app/app.component.ts,将表单组件嵌入模板:

import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: ''
})
export class AppComponent { }

编写模板与双向数据绑定

创建初始模板文件 app/site-form.component.html,包含基础表单结构:

网站表单

为使用 Bootstrap 样式,在项目根目录执行 cnpm install bootstrap --save,并在 index.html 中添加:

执行 npm start 后访问 https://localhost:3000/,可看到基础表单界面:

基础表单界面

接下来使用 ngModel 实现双向数据绑定,将表单控件与组件模型关联:

网站表单

{{diagnostic}}

每个 inputidlabelfor 对应,name 属性用于 Angular 表单模块注册控制器。运行后界面如下:

双向绑定表单界面

表单状态跟踪与验证反馈

ngModel 会根据控件状态自动添加 CSS 类,便于实现视觉反馈:

状态为 true 时的类为 false 时的类
控件已被访问ng-touchedng-untouched
控件值已变化ng-dirtyng-pristine
控件值有效ng-validng-invalid

在项目根目录创建 forms.css,添加状态样式:

.ng-valid[required], .ng-valid.required  {
  border-left: 5px solid #42A948; /* green */
}
.ng-invalid:not(form)  {
  border-left: 5px solid #a94442; /* red */
}

index.html 中引入该样式:

修改模板,通过模板引用变量 #name="ngModel" 获取控件状态,并控制错误提示的显隐:

网站表单

{{diagnostic}}

网站名是必需的

清空网站名字段后,错误提示将显示:

表单验证错误提示

表单提交与新增逻辑

在模板中添加“新增网站”按钮,并绑定点击事件:

在组件中实现 newSite() 方法,通过 active 标记与 setTimeout 重置表单状态:

active = true;
newSite() {
  this.model = new Site(5, '', '');
  this.active = false;
  setTimeout(() => this.active = true, 0);
}

使用 ngSubmit 指令处理表单提交,并通过模板引用变量 #siteForm="ngForm" 获取表单整体状态:

完整组件代码如下:

import { Component } from '@angular/core';
import { Site }    from './site';

@Component({
  moduleId: module.id,
  selector: 'site-form',
  templateUrl: 'site-form.component.html'
})
export class SiteFormComponent {
  urls = ['www.runoob.com', 'www.google.com',
            'www.taobao.com', 'www.facebook.com'];
  model = new Site(1, '菜鸟教程', this.urls[0], 10000);
  submitted = false;
  onSubmit() { this.submitted = true; }
  // TODO: 完成后移除
  get diagnostic() { return JSON.stringify(this.model); }
  active = true;
  newSite() {
    this.model = new Site(5, '', '');
    this.active = false;
    setTimeout(() => this.active = true, 0);
  }
}

完整模板代码如下:

网站表单

{{diagnostic}}

网站名是必需的

你提交的信息如下:

网站名

{{ model.name }}

网站 alexa 排名

{{ model.alexa }}

网站 URL

{{ model.url }}


通过 submitted 属性控制表单与提交结果的显隐。初始 submitted = false 显示表单,提交后设为 true 隐藏表单并展示结果:

submitted = false;
onSubmit() { this.submitted = true; }

最终项目目录结构如下:

项目目录结构

完整实例运行效果如下:

完整实例运行效果

来源:https://www.runoob.com/angularjs2/angularjs2-forms.html
上一篇jQuery UI 使用指南:文件结构、引入方法与组件调用示例 下一篇Angular 2 用户输入事件绑定与模板变量实战
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CSS3入门指南:常用特性解析与实战练习路径
前端开发 · 2026-09-01

CSS3入门指南:常用特性解析与实战练习路径

CSS3是现代网页开发的核心技术,涵盖圆角、阴影、渐变、过渡、动画及响应式布局等高频特性。本文梳理了CSS3的核心应用场景、分步学习路径与综合练习案例,帮助初学者快速建立从基础排版到现代交互的完整开发思路,并规避常见样式陷阱。

CSS border 边框属性详解:语法、拆分写法与常见问题排查
前端开发 · 2026-09-01

CSS border 边框属性详解:语法、拆分写法与常见问题排查

本文系统讲解CSS标准边框属性border的完整语法结构,涵盖简写与拆分写法、单边控制技巧及border-radius配合方案。针对边框不显示、元素尺寸异常等高频问题提供排查路径,帮助开发者快速掌握边框设置规范并提升界面视觉一致性。

CSS3动画属性有哪些:常用属性与用法说明
前端开发 · 2026-09-01

CSS3动画属性有哪些:常用属性与用法说明

CSS3动画主要分为transition过渡与animation关键帧两类。本文梳理常用属性、简写语法与@keyframes规则,结合悬停、入场、循环等场景给出代码示例与选型建议,帮助开发者快速写出流畅且可控的动画效果。

CSS3渐变色语法与常见用法
前端开发 · 2026-09-01

CSS3渐变色语法与常见用法

CSS3渐变色通过纯代码生成平滑颜色过渡,广泛用于按钮、横幅与卡片背景。本文系统梳理线性与径向渐变的核心语法、方向控制、停靠点设置及多层叠加技巧,提供可直接复用的场景代码,并给出兼容性策略与常见渲染异常排查方法,帮助开发者快速构建稳定、可维护的渐变样式。

CSS3手册中文版下载指南:获取渠道、筛选标准与使用建议
前端开发 · 2026-09-01

CSS3手册中文版下载指南:获取渠道、筛选标准与使用建议

寻找CSS3手册中文版下载资源时,如何判断来源可靠性、筛选高质量内容并有效使用?本文从获取渠道、版本识别、下载验收到替代方案,提供一套可执行的判断标准,帮助你快速找到适合学习或查阅的中文手册。