使用 ngrx 的异步验证反应形式 angular
async validation reactive forms angular with ngrx
我需要验证用户是否存在于我的应用程序状态中。在我的应用程序中,我使用 ngrx 并通过选择器验证用户是否存在。
我该怎么做?
我无法通过这种方式进行验证,我做错了什么?
return this._formBuilder.group({
id: ['', this._existUser()],
dateStart: ['', Validators.required],
dateEnd: ['', Validators.required]
})
private _existUser(): AsyncValidatorFn {
return (control: AbstractControl): Promise<{ [key: string]: any } | null> | Observable<{ [key: string]: any } | null> => {
const userId = control.value;
return this._store.select(usersSelectors.getUserById, { id: userId}).pipe(
debounceTime(500),
take(1),
map(value => {
// Not entering the map...
return !!value ? { invalid: true } : null;
})
)
};
}
selectors.ts:
export const getUserById = createSelector(
selectEntities,
(entities, props): any => {
return entities[props.id];
}
);
问题是您将 this._existUser() 定义为用于验证器或选项的第二个参数,async-validators 必须作为第三个参数传递
return this._formBuilder.group({
id: ['', [], this._existUser()],
dateStart: ['', Validators.required],
dateEnd: ['', Validators.required]
})
我需要验证用户是否存在于我的应用程序状态中。在我的应用程序中,我使用 ngrx 并通过选择器验证用户是否存在。
我该怎么做?
我无法通过这种方式进行验证,我做错了什么?
return this._formBuilder.group({
id: ['', this._existUser()],
dateStart: ['', Validators.required],
dateEnd: ['', Validators.required]
})
private _existUser(): AsyncValidatorFn {
return (control: AbstractControl): Promise<{ [key: string]: any } | null> | Observable<{ [key: string]: any } | null> => {
const userId = control.value;
return this._store.select(usersSelectors.getUserById, { id: userId}).pipe(
debounceTime(500),
take(1),
map(value => {
// Not entering the map...
return !!value ? { invalid: true } : null;
})
)
};
}
selectors.ts:
export const getUserById = createSelector(
selectEntities,
(entities, props): any => {
return entities[props.id];
}
);
问题是您将 this._existUser() 定义为用于验证器或选项的第二个参数,async-validators 必须作为第三个参数传递
return this._formBuilder.group({
id: ['', [], this._existUser()],
dateStart: ['', Validators.required],
dateEnd: ['', Validators.required]
})