我为我的表单创建了一个定制验证器.它应该判断在特定输入字段中输入的值是否已经出现在本地数组中.
由于该数组定期更新,但在创建时(当我创建表单并声明验证器时)仍然为空,因此我创建了该数组的Observable
,以将其作为参数传递给验证器.但在验证器端I never get any value上,即使数组有一些.
你能帮我找出我做错了什么吗?
values: RowData[] = []; // The values array which is regularly updated
values$: Observable<RowData[]>;
constructor() {
this.values$ = of(this.values); // Observable of the array
// Build form
this.myForm = this.formBuilder.group({
id: [
'',
checkIdUniqueValidator(this.generalWellsIds$),
]
});
}
下面是自定义验证器:
export function checkIdUniqueValidator(existingValues$: Observable<RowData[]>): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
let existingValues: Array<string>;
// Here I try to get values from the Observable
const tempSub = existingValues$.subscribe(x => existingValues = x.map(y => y.id));
const valueAlreadyExists = existingValues
&& existingValues.length > 0
&& existingValues.includes(control.value);
tempSub.unsubscribe();
return valueAlreadyExists
? {duplicate: {value: control.value}}
: null;
};
}