web-dev-qa-db-ja.com

PromiseまたはObservableを返す検証者が期待されます

Angular 5でカスタム検証を実行しようとしていますが、次のエラーに直面しています

Expected validator to return Promise or Observable

値が必要な値と一致しない場合、フォームにエラーを返したいだけです。私のコードは次のとおりです。

これは私のフォームがあるコンポーネントです

  constructor(fb: FormBuilder, private cadastroService:CadastroService) {
    this.signUp = fb.group({
      "name": ["", Validators.compose([Validators.required, Validators.minLength(2)])],
      "email": ["", Validators.compose([Validators.required, Validators.email])],
      "phone": ["", Validators.compose([Validators.required, Validators.minLength(5)])],
      "cpf": ["", Validators.required, ValidateCpf]
    })     
   }

このコードは、実装する検証付きのファイルにあります。

import { AbstractControl } from '@angular/forms';

export function ValidateCpf(control: AbstractControl){
    if (control.value == 13445) {
        return {errorCpf: true}
    }
    return null;
}

誰か助けてくれますか?そのタイプの検証は、オブザーバブルでのみ機能しますか、それとも約束やオブザーバブルにならずに実行できますか?ありがとう

32

これは、配列に複数のバリデーターを追加する必要があることを意味します

。例:

エラーあり

profileFormGroup = {
  budget: [null, Validators.required, Validators.min(1)]
};

上記のエラーは、validatorがPromiseまたはObservableを返すというエラーをスローします

修正:

profileFormGroup = {
  budget: [null, [Validators.required, Validators.min(1)]]
};

説明:

angularで、複数のバリデーターが使用されている場合に、2番目の位置に配列で指定できる組み込みのバリデーターを使用して行われるリアクティブフォーム検証。

FIELD_KEY:[INITIAL_VALUE、[LIST_OF_VALIDATORS]]

63
vimal dhanush

以下が動作するはずです:

  "cpf": ["", [Validators.required, ValidateCpf]]

フォームコントロールが期待する引数は次のとおりです。

constructor(formState: any = null, 
            validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
            asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null)

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

Validators.compose()は冗長です。

配列を渡すだけです。 OPの問題は、バリデーターを[]でラップして配列にすることに失敗したために発生します。したがって、minLength()が非同期であり、結果のエラーメッセージであると想定されます。

このソリューションが役立つことを願っています。ありがとう。

1
Kamlesh

エラー:userName:[''、[Validators.required、Validators.minLength(3)]、forbiddenNameValidator(/ password /)]、

ans:userName:[''、[Validators.required、Validators.minLength(3)、forbiddenNameValidator(/ password /)]]、

バリデータは配列内の2番目のパラメーターのみを使用します。外部配列用ではありません

0
user1934070