2017-12-23 18 views
1

저는 Angular 5 form을 만들고 있습니다. 내 양식 (이메일 또는 전화)에 연락 정보가 필요합니다. 전자 메일 주소 또는 전화 번호가 필요하지만 둘 다 필요하지는 않습니다. 이 시나리오에 대한 사용자 지정 유효성 검사기는 어떻게 만듭니 까? docs에서 유효성 검사기는 단 하나의 컨트롤을 담당하는 것으로 보이지만 유효성 검사기는 모든 값을 검사하기 위해 여러 컨트롤을 인식해야합니다.여러 필드를 각도로 확인하는 방법은 무엇입니까?

ngOnInit() { 
    this.form = this.formBuilder.group({ 
     'name': [null, [Validators.required]], 
     'email': [null, []], // A user can provide email OR phone, but 
     'phone': [null, []], // both are not required. How would you do this? 
    }); 
} 
+0

각각에 대해 동일한 사용자 정의 유효성 검사기를 사용하지만 각 컨트롤에 대한 참조를 사용하고 둘 중 하나가 사용되면 true를 반환합니다. 다음은 좋은 아이디어입니다 : https://stackoverflow.com/questions/43487413/password-and-confirm-password-field-validation-angular2-reactive-forms 같은 아이디어를 사용하여 암호의 유효성을 검사합니다. 그래도 두 개의 양식 컨트롤을 검사하여 그룹 유효성 검사기를 만듭니다. –

+0

아직 완벽하게 작동하지 않습니다. https://stackblitz.com/edit/angular-9effym?file=app%2Fapp.component.ts – HDJEMAI

답변

2

한 가지 가능한 솔루션 예를 들어, 인수로 양식 자체를받는 함수를 선언한다 :

export function emailAndPhone() { 
     return (form: FormGroup): {[key: string]: any} => { 
     return (form.value.phone && form.value.email) || 
       (!form.value.phone && !form.value.email) 
        ? { emailAndPhoneError : true } 
        : null; 
     }; 
    } 

설정 validator 엑스트라 사용하여 양식 정의에 대한 검증 기능 :

ngOnInit() { 
    this.form = this.formBuilder.group({ 
     'name': [null, [Validators.required]], 
     'email': [null, []], // A user can provide email OR phone, but 
     'phone': [null, []], // both are not required. How would you do this? 
    }, { validator: emailAndPhone() }); 
} 

유효성 검사에서 유효하지 않은 입력이 감지 된 경우에만 emailAndPhoneError이 정의되었는지 확인하십시오. arlier가 양식 오류 목록에 있습니다. 이와 같이

+0

emailAndPhoneError는 어디에서 왔습니까? – estus

+0

'{emailAndPhoneError : true}'는'emailAndPhone()'함수의 반환 값입니다. 조건이 유효하지 않은 경우에만 리턴되고 그렇지 않으면 널을 리턴합니다. –

+0

포맷팅 때문에 간과했기 때문에 감사합니다. – estus