异步验证反应形式与ngrx

时间:2019-06-05 13:32:15

标签: angular ngrx angular-reactive-forms

我需要验证用户是否以我的应用程序状态存在。在我的应用程序中,我使用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];
    }
);

1 个答案:

答案 0 :(得分:0)

问题是您将this._existUser()定义为用于验证器或选项的第二个参数,异步验证器必须作为第三个参数传递

return this._formBuilder.group({
  id: ['', [], this._existUser()],
  dateStart: ['', Validators.required],
  dateEnd: ['', Validators.required]
})

https://angular.io/api/forms/FormControl