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;
}
誰か助けてくれますか?そのタイプの検証は、オブザーバブルでのみ機能しますか、それとも約束やオブザーバブルにならずに実行できますか?ありがとう
これは、配列に複数のバリデーターを追加する必要があることを意味します
。例:
エラーあり
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]]
以下が動作するはずです:
"cpf": ["", [Validators.required, ValidateCpf]]
フォームコントロールが期待する引数は次のとおりです。
constructor(formState: any = null,
validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null)
Validators.compose()は冗長です。
配列を渡すだけです。 OPの問題は、バリデーターを[]でラップして配列にすることに失敗したために発生します。したがって、minLength()が非同期であり、結果のエラーメッセージであると想定されます。
このソリューションが役立つことを願っています。ありがとう。
エラー:userName:[''、[Validators.required、Validators.minLength(3)]、forbiddenNameValidator(/ password /)]、
ans:userName:[''、[Validators.required、Validators.minLength(3)、forbiddenNameValidator(/ password /)]]、
バリデータは配列内の2番目のパラメーターのみを使用します。外部配列用ではありません