請?zhí)顚懶彰?/div>
姓名長度不能大于
{{ name.errors.maxlength.requiredLength }} 實際填寫長度為
{{ name.errors.maxlength.actualLength }}
2.5 自定義同步表單驗證器
自定義驗證器的類型是 TypeScript 類
類中包含具體的驗證方法,驗證方法必須為靜態(tài)方法
驗證方法有一個參數(shù) control,類型為 AbstractControl。其實就是 FormControl 類的實例對象的類型
如果驗證成功,返回 null
如果驗證失敗,返回對象,對象中的屬性即為驗證標(biāo)識,值為 true,標(biāo)識該項驗證失敗
驗證方法的返回值為 ValidationErrors | null
import { AbstractControl, ValidationErrors } from "@angular/forms"
export class NameValidators {
// 字段值中不能包含空格
static cannotContainSpace(control: AbstractControl): ValidationErrors | null {
// 驗證未通過
if (/\s/.test(control.value)) return { cannotContainSpace: true }
// 驗證通過
return null
}
}
import { NameValidators } from "./Name.validators"
contactForm: FormGroup = new FormGroup({
name: new FormControl("", [
Validators.required,
NameValidators.cannotContainSpace
])
})
2.6 自定義異步表單驗證器
import { AbstractControl, ValidationErrors } from "@angular/forms"
import { Observable } from "rxjs"
export class NameValidators {
static shouldBeUnique(control: AbstractControl): Promise {
return new Promise(resolve => {
if (control.value == "admin") {
resolve({ shouldBeUnique: true })
} else {
resolve(null)
}
})
}
}
contactForm: FormGroup = new FormGroup({
name: new FormControl(
"",
[
Validators.required
],
NameValidators.shouldBeUnique
)
})
正在檢測姓名是否重復(fù)
2.7 FormBuilder
創(chuàng)建表單的快捷
方式。
import { FormBuilder, FormGroup, Validators } from "@angular/forms"
export class AppComponent {
contactForm: FormGroup
constructor(private fb: FormBuilder) {
this.contactForm = this.fb.group({
fullName: this.fb.group({
firstName: ["", [Validators.required]],
lastName: [""]
}),
phone: []
})
}
}
2.8 監(jiān)聽表單值的變化
實際工作中,我們常常需要根據(jù)某個表單值得變化而進(jìn)行相應(yīng)的處理,一般可以使用ngModalChange
或者表單來實現(xiàn)
2.8.1 ngModalChange
import { FormControl, FormGroup } from "@angular/forms"
export class AppComponent {
public name = 'a';
public nameChange() {
}
}
angular官方并不建議使用ngModalChange。
2.8.2 表單控制
import { FormControl, FormGroup } from "@angular/forms"
export class AppComponent {
contactForm: FormGroup = new FormGroup({
name: new FormControl()
})
ngOnInt() {
this.contactForm.get("name").valueChanges.subscribe(data => {
console.log(data);
}
}
}
2.9 練習(xí)
1)、獲取一組復(fù)選框中選中的值
import { Component } from "@angular/core"
import { FormArray, FormBuilder, FormGroup } from "@angular/forms"
interface Data {
name: string
value: string
}
@Component({
selector: "app-checkbox",
templateUrl: "./checkbox.component.html",
styles: []
})
export class CheckboxComponent {
Data: Array = [
{ name: "Pear", value: "pear" },
{ name: "Plum", value: "plum" },
{ name: "Kiwi", value: "kiwi" },
{ name: "Apple", value: "apple" },
{ name: "Lime", value: "lime" }
]
form: FormGroup
constructor(private fb: FormBuilder) {
this.form = this.fb.group({
checkArray: this.fb.array([])
})
}
onChange(event: Event) {
const target = event.target as HTMLInputElement
const checked = target.checked
const value = target.value
const checkArray = this.form.get("checkArray") as FormArray
if (checked) {
checkArray.push(this.fb.control(value))
} else {
const index = checkArray.controls.findIndex(
control => control.value === value
)
checkArray.removeAt(index)
}
}
onSubmit() {
console.log(this.form.value)
}
}
2)、獲取單選框中選中的值
export class AppComponent {
form: FormGroup
constructor(public fb: FormBuilder) {
this.form = this.fb.group({ gender: "" })
}
onSubmit() {
console.log(this.form.value)
}
}
2.10 其他
patchValue:設(shè)置表單控件的值(可以設(shè)置全部,也可以設(shè)置其中某一個,其他不受影響)
setValue:設(shè)置表單控件的值 (設(shè)置全部,不能排除任何一個)
valueChanges:當(dāng)表單控件的值發(fā)生變化時被觸發(fā)的事件
reset:表單內(nèi)容置空
以上就是關(guān)于“angular的兩種類型表單是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章名稱:angular的兩種類型表單是什么
文章地址:
http://weahome.cn/article/jehhpo.html