Angular 反应式表单名称唯一验证器
我在Angular 6中做一个web应用程序,我使用的是反应式表单。我有一个Angular 反应式表单名称唯一验证器,angular,Angular,我在Angular 6中做一个web应用程序,我使用的是反应式表单。我有一个名称字段,我想验证它是否唯一。我将它的值与数组进行比较 companies: Company[]; this.companyFormGroup = this.fb.group({ name: [null, Validators.required], emailAddress: [null, Validators.compose([Validators.required, Validators.e
名称
字段,我想验证它是否唯一。我将它的值与数组进行比较
companies: Company[];
this.companyFormGroup = this.fb.group({
name: [null, Validators.required],
emailAddress: [null, Validators.compose([Validators.required, Validators.email])]
}, {validator: this.uniqueValidator});
uniqueValidator(control: AbstractControl) {
const name = control.get('name').value;
if (control.get('name').valid) {
const isNameUnique = this.companies.map(company => company.name).some(value => value === name);
if (!isNameUnique) {
console.log(isNameUnique);
control.get('name').setErrors({unavailable: true});
}
}
}
无法读取未定义的属性“companys”
在推送时../src/app/modules/create company/create-company.component.ts.CreateCompanyComponent.uniqueValidator
(创建company.component.ts:79)
在forms.js:602
在Array.map()处
at_executeValidators(forms.js:602)
位于FormGroup.validator(forms.js:567)
我的目标是,如果用户输入的名称已存在,则显示错误,如果名称唯一,则删除错误。从FormControl/FormBuilder中调用验证程序方法时,验证程序方法中的上下文未引用当前组件。这就是
此
未定义的原因
您可以通过使用bind
将this
绑定到验证器以设置上下文来解决此问题:
validator: this.uniqueValidator.bind(this)
您可以通过在应用bind之前和之后打印此
进行测试:
uniqueValidator(control: AbstractControl) {
const name = control.get('name').value;
console.log(this)
/*
if (control.get('name').valid) {
const isNameUnique = this.companies.map(company => company.name).some(value => value === name);
if (!isNameUnique) {
console.log(isNameUnique);
control.get('name').setErrors({unavailable: true});
}
}*/
}
如果是这样的话,那么它应该给出这样的错误。未定义uniquevalidator@wentjun??