本篇文章带大家继续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)其它相关文章! |
