2

각도 2에서 사용자 정의 유효성 검사기를 직접 만들려고합니다.종속성이있는 Angular2 사용자 정의 유효성 검사기

나는 validator 인터페이스를 구현하는 자체 CustomValidators 클래스를 만들었습니다.

import { FormControl } from "@angular/forms"; 
import { MyhttpService } from "./myhttp.service"; 
import { Response } from "@angular/http"; 
import { Injectable, Directive } from '@angular/core'; 


@Injectable() 
export class CustomValidators{ 

constructor(private _http : MyhttpService){ 

} 

public api(c : FormControl) 
{ 
    // Run 
    this._http.get("/expenses/email?email=" + c.value).subscribe((res:Response) => { 
     if(res.status === 200){ 
      // email exists 
      return null; 
     } else { 
      return {"email" : true} 
     } 
    }); 
} 

api를 정적 메서드로 만들면 클래스를 성공적으로 사용할 수 있습니다. 내가 생성자가 실행되지 않았습니다으로 생성자 값 중 하나에 액세스 할 필요가 없습니다

this._formDetails = fb.group({ 
    "managerEmail" : ["", [Validators.required, CustomValidators.api] ] 
}); 

그러나 물론 이것은 정적 방법이다.

따라서 종속성이있는 사용자 정의 유효성 검사기를 구현하는 방법을 찾을 수 없으며 방법이 있어야합니다.

내 클래스가 클래스의 인스턴스화 된 개체를 받도록 CustomValidators를 공급자로 나열하려고했습니다.

재산권 'API'나는 올바른 방법으로 클래스를 제공 유형에 '대해서 typeof CustomValidators'

암이 존재하지 않는 이유는 무엇입니까? 왜 그 방법은 존재하지 않습니까?

+0

동일한 문제가 발생했는데 해결책을 찾았습니까? –

답변

0

이 시도 :

this._formDetails = fb.group({ 
    "managerEmail" : ["", Validators.required, CustomValidators.api] 
}); 

Validators.required는 동기 검증이다, 그러나 당신의 CustomValidators.api 비동기 검사기입니다.

the official documentation마다 각 양식 컨트롤은 상태, 동기 유효성 검사기, 비동기 유효성 검사기로 지정해야합니다.

+0

당신의 대답은 실수를 포함 'this._formDetails = fb.group ({ "managerEmail을": [ "", Validators.required], [CustomValidators.api] });' 당신이 의미하는 것입니다. 그러나 그것은 그의 질문에 대한 대답이 아닙니다. –

관련 문제