[javascript] 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;
}

누군가 나를 도울 수 있습니까? 이러한 유형의 유효성 검사는 관찰 가능 항목에서만 작동합니까, 아니면 약속이나 관찰 가능하지 않고 할 수 있습니까? 감사



답변

이는 여러 유효성 검사기를 배열에 추가 해야 함을 의미합니다.

. 예:

오류 있음

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

위에는 유효성 검사기가 Promise 또는 Observable을 반환 하는 오류가 발생합니다.

고치다:

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

설명:

여러 유효성 검사기가 사용 된 경우 두 번째 위치에 배열로 제공 될 수있는 내장 유효성 검사기를 사용하여 수행되는 각도 반응 양식 유효성 검사에서 .

FIELD_KEY : [INITIAL_VALUE, [LIST_OF_VALIDATORS]]


답변

다음이 작동합니다.

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

양식 컨트롤이 예상하는 인수는 다음과 같습니다.

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

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


답변

OP의 질문과 직접 ​​관련이 없지만 약간 다른 문제에 대해 동일한 오류가 발생했습니다. 비동기 유효성 검사기가 있었지만 거기에서 Observable (또는 Promise)을 반환하는 것을 잊었습니다.

내 원래 비동기 유효성 검사기

public availableEmail(formControl: FormControl) {
   if(formControl && formControl.value){
     return this.http.get('')
   }
}

문제는 if 문이 거짓이면 어떨까요? 아무것도 반환하지 않고 런타임 오류가 발생합니다. 반환 유형을 추가하고 (올바른 유형을 반환하지 않으면 IDE가 불평하는지 확인) of(true)if-sentence가 실패 할 경우 반환 합니다.

다음은 업데이트 된 비동기 유효성 검사기입니다.

public availableEmail(formControl: FormControl): Observable<any> {
   if(formControl && formControl.value){
     return this.http.get('someUrl');
   }
   return of(true);
}


답변

Validators.compose ()는 중복됩니다.

배열을 전달할 수 있습니다. OP의 문제는 유효성 검사기를 []에 래핑하여 배열로 만들지 못했기 때문에 발생하므로 minLength () 하나는 비동기로 간주되고 결과 오류 메시지가 나타납니다.

이 솔루션이 도움이되기를 바랍니다. 감사.


답변

오류 : userName : [ ”, [Validators.required, Validators.minLength (3)], forbiddenNameValidator (/ password /)],

ans : userName : [ ”, [Validators.required, Validators.minLength (3), forbiddenNameValidator (/ password /)]],

유효성 검사기는 내부 배열에서 두 번째 매개 변수 만 사용합니다. 외부 어레 이용 아님


답변

여러 유효성 검사기를 추가하는 경우 세 번째 대괄호 ‘[]’를 추가해야하며 그 안에 유효성 검사기를 배치해야합니다. 아래와 같이 :

this.yourForm= this.formBuilder.group({
    amount: [null, [Validators.required, Validators.min(1)]],
});


답변

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

고치다:
"cpf": ["", [Validators.required, ValidateCpf]]