2017-12-08 3 views
2

이름이 고유한지 여부를 확인하기 위해 서비스에 호출해야하는 반응 형 양식의 사용자 정의 비동기 유효성 검사기가 있습니다.주입 된 공급자를 사용한 각도 비동기 양식 유효성 검사

유효성 검사기는 순수한 함수이므로 HTTP 호출과 같은 공급자를 주입하는 좋은 방법이 아닌 것 같습니다.

나는 현재 서비스를 전달하지만,이 해키 조금 느낌 함수를 반환 한 코드 ...

export function nameValidator(platformService: PlatformService): ValidatorFn { 
    return (control: FormControl): { [key: string]: any } => { 
     return userService.getUnique(control.value) 
    }; 
} 

내 질문에 더 나은 방법은 무엇입니까?

답변

2

템플릿의 지시문으로 사용할 때 유효성 검사기를 주사 할 수 있습니다 (directive classes).

@Injectable() 
class NameValidator implements AsyncValidator { 
    constructor(private userService: UserService) {} 

    validate = (control: FormControl) => this.userService.getUnique(control.value); 
} 

... 

new FormControl('', nameValidator.validate); 

: 그들은 그들이 useFactory 또는 useClass 제공해야 DI를 사용하기 위해서는 FormControl 또는 FormBuilder

직접 지정 구성 요소에 주입 할 때

그들은 기능이 될 것으로 예상된다 validate 메서드는 콜백으로 전달되며 화살표이거나 bind 인 클래스 인스턴스에 바인딩되어야합니다.