本篇文章带大家继续angular的学习,了解一下angular中的响应式表单,介绍一下全局注册响应式表单模块、添加基础表单控件的相关知识,希望对大家有所帮助!
本篇文章带大家继续angular的学习,了解一下angular中的响应式表单,介绍一下全局注册响应式表单模块、添加基础表单控件的相关知识,希望对大家有所帮助!响应式表单Angular 提供了两种不同的方法来通过表单处理用户输入:
全局注册响应式表单模块 ReactiveFormsModule要使用响应式表单控件,就要从 /***** app.module.ts *****/ import { ReactiveFormsModule } from '@angular/forms'; @NgModule({ imports: [ // other imports ... ReactiveFormsModule ], }) export class AppModule { } 添加基础表单控件 FormControl使用表单控件有三个步骤。
要注册一个表单控件,就要导入 /***** test.component.ts *****/ import { Component } from '@angular/core'; import { FormControl } from '@angular/forms'; @Component({ selector: 'app-name-editor', templateUrl: './name-editor.component.html', styleUrls: ['./name-editor.component.css'] }) export class TestComponent { // 可以在 FormControl 的构造函数设置初始值,这个例子中它是空字符串 name = new FormControl(''); } 然后在模板中注册该控件,如下: <!-- test.component.html --> <label> Name: <input type="text" [formControl]="name"> </label> <!-- input 中输入的值变化的话,这里显示的值也会跟着变化 --> <p>name: {{ name.value }}</p>
把表单控件分组 FormGroup就像 看下例演示: import { Component } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms' @Component({ selector: 'app-test', templateUrl: './test.component.html', styleUrls: ['./test.component.css'] }) export class TestComponent implements OnInit { constructor() {} profileForm = new FormGroup({ firstName: new FormControl('', [Validators.required,Validators.pattern('[a-zA-Z0-9]*')]), lastName: new FormControl('', Validators.required), }); onSubmit() { // 查看控件组各字段的值 console.log(this.profileForm.value) } } <!-- profileForm 这个 FormGroup 通过 FormGroup 指令绑定到了 form 元素,在该模型和表单中的输入框之间创建了一个通讯层 --> <!-- FormGroup 指令还会监听 form 元素发出的 submit 事件,并发出一个 ngSubmit 事件,让你可以绑定一个回调函数。 --> <form [formGroup]="profileForm" (ngSubmit)="onSubmit()"> <label> <!-- 由 FormControlName 指令把每个输入框和 FormGroup 中定义的表单控件 FormControl 绑定起来。这些表单控件会和相应的元素通讯 --> First Name: <input type="text" formControlName="firstName"> </label> <label> Last Name: <input type="text" formControlName="lastName"> </label> <button type="submit" [disabled]="!profileForm.valid">Submit</button> </form> <p>{{ profileForm.value }}</p> <!-- 控件组的状态: INVALID 或 VALID --> <p>{{ profileForm.status }}</p> <!-- 控件组输入的值是否为有效值: true 或 false--> <p>{{ profileForm.valid }}</p> <!-- 是否禁用: true 或 false--> <p>{{ profileForm.disabled }}</p>
使用更简单的 FormBuilder 服务生成控件实例在响应式表单中,当需要与多个表单打交道时,手动创建多个表单控件实例会非常繁琐。
看下例演示: import { Component } from '@angular/core'; // 1、导入 FormBuilder import { FormBuilder, Validators } from '@angular/forms'; @Component({ selector: 'app-test', templateUrl: './test.component.html', styleUrls: ['./test.component.css'] }) export class TestComponent { // 2、注入 FormBuilder 服务 constructor(private fb: FormBuilder) { } ngOnInit() { } profileForm = this.fb.group({ firstName: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]*')]], lastName: ['', Validators.required], }); // 相当于 // profileForm = new FormGroup({ // firstName: new FormControl('', [Validators.required,Validators.pattern('[a-zA-Z0-9]*')]), // lastName: new FormControl('', Validators.required), // }); onSubmit() { console.log(this.profileForm.value) console.log(this.profileForm) } } 对比可以发现,使用 表单验证器 Validators
验证器(
验证器Validators类的API
class Validators { static min(min: number): ValidatorFn // 允许输入的最小数值 static max(max: number): ValidatorFn // 最大数值 static required(control: AbstractControl): ValidationErrors | null // 是否必填 static requiredTrue(control: AbstractControl): ValidationErrors | null static email(control: AbstractControl): ValidationErrors | null // 是否为邮箱格式 static minLength(minLength: number): ValidatorFn // 最小长度 static maxLength(maxLength: number): ValidatorFn // 最大长度 static pattern(pattern: string | RegExp): ValidatorFn // 正则匹配 static nullValidator(control: AbstractControl): ValidationErrors | null // 什么也不做 static compose(validators: ValidatorFn[]): ValidatorFn | null static composeAsync(validators: AsyncValidatorFn[]): AsyncValidatorFn | null } 内置验证器函数要使用内置验证器,可以在实例化 import { Validators } from '@angular/forms'; ... ngOnInit(): void { this.heroForm = new FormGroup({ // 实例化 FormControl 控件 name: new FormControl(this.hero.name, [ Validators.required, // 验证,必填 Validators.minLength(4), // 长度不小于4 forbiddenNameValidator(/bob/i) // 自定义验证器 ]), alterEgo: new FormControl(this.hero.alterEgo), power: new FormControl(this.hero.power, Validators.required) }); } get name() { return this.heroForm.get('name'); } get power() { return this.heroForm.get('power'); } 自定义验证器
有时候内置的验证器并不能很好的满足需求,比如,我们需要对一个表单进行验证,要求输入的值只能为某一个数组中的值,而这个数组中的值是随程序运行实时改变的,这个时候内置的验证器就无法满足这个需求,需要创建自定义验证器。
更多编程相关知识,请访问:编程入门!! 以上就是angular学习之浅析响应式表单的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |