案例
AbstractControl
它提供了一些所有控件和控件组共有的行为,比如运行验证器、计算状态和重置状态。 它还定义了一些所有子类共享的属性,如 value、valid 和 dirty。不允许直接实例化它。
文档API
——————————————————————————
比较一下用表单构建器和手动创建实例这两种方式。
FormBuilder
this.checkoutForm = this.formBuilder.group this.checkoutForm.reset()
import { FormBuilder } from "@angular/forms";checkoutForm;constructor(private: formBuilder: FormBuilder) {this.checkoutForms = this.formBuilder.group({name: '',address: ''});}
formGroup, ngSubmit
[formGroup]="checkoutForm"
<form [formGroup]="checkoutForms" (ngSubmit)="onSubmit(checkoutForm.value)"></form>
export class ProfileEditorComponent {profileForm = new FormGroup({firstName: new FormControl(''),lastName: new FormControl(''),});}
this.checkoutForms = new FormGroup({first: new FormControl('Nancy', Validators.minLength(2)),last: new FormControl('Drew'),});
form 标签所发出的 submit 事件是原生 DOM 事件,通过点击类型为 submit 的按钮可以触发本事件。这还让用户可以用回车键来提交填完的表单。
FormControl
import { FormControl } from '@angular/forms';@Component({selector: 'app-reactive-favorite-color',template: `Favorite Color: <input type="text" [formControl]="favoriteColorControl">`})export class FavoriteColorComponent {favoriteColorControl = new FormControl('');}
formControlName
使用 formControlName 属性绑定来把 checkoutForm 表单控件中的 name 和 address 绑定到它们的输入字段
<form [formGroup]="checkoutForm" (ngSubmit)="onSubmit(checkoutForm.value)"><div><label>Name</label><input type="text" formControlName="name"></div><div><label>Address</label><input type="text" formControlName="address"></div><button class="button" type="submit">Purchase</button></form>
多种类型的用法
button submit
<button type="submit" [disabled]="!profileForm.valid">Submit</button>
onSubmit() {// TODO: Use EventEmitter with form valueconsole.warn(this.profileForm.value);}
valueChanges
如果空间是disabled,valueChanges中不会包含此空间,formly的modelChange中含有
updateValueAndValidity
也会触发formly的modelChange
this.formControl.updateValueAndValidity({onlySelf: true,emitEvent: true})
statusChange
一般的提交表单
filter中应该取消订阅
this.form.statusChanges.pipe(filter(() => this.form.valid)),takeUntil(this.destroy$).subscribe(() => this.onFormValid());ngOnDestroy() {this.destroy$.next();}
自定义表单控件
Angular ControlValueAccessor - 自定义表单控件介绍与实战
ngModel双向绑定
使用ControlValueAccessor自定义表单数据双向绑定
网易云音乐播放器滑块组件ngModel双向绑定

