2016-10-11 2 views
0

여기에 2 개의 angle2 사용자 정의 유효성 검사가 있는데, 첫 번째 validateAge는 작동하지만 두 번째 validateDob은 그렇지 않습니다 ... 차이점은 validateAge가 현재 사용중인 구성 요소를 사용한다는 점입니다 텍스트 기반 필드 인 경우 두 번째 필드는 날짜 입력 필드를 사용하여 실제 날짜를 찾고 나이 필드와 비교하여 현재 날짜와 생년월일의 차이를 찾아야합니다. 하지만 뭔가 이상하지 않습니다 ... 어떤 아이디어가Angular2의 사용자 정의 유효성 검사가 작동하지 않습니다.

function validateAge(control: FormControl): { [s: string]: boolean } { 
    if (parseInt(control.value) <= 0) { 
    return {invalidAge: true}; 
    } 
} 

function validateDob(control: FormControl): {[s:string]: boolean}{ 
    var today = new Date(); 
    var calcAge = today - control.value; 
    if (calcAge != parseInt([{age}])){ 
    return {invalidDate: true} 
    } 
} 
+0

비교 문에서 'Math.floor (calcAge)'를 사용해보세요. – Feathercrown

+0

control.value의 실제 값은 무엇입니까? – epascarello

+0

죄송합니다, control.value는 입력 된 생년월일입니다 ... 03/01/1978처럼

답변

1

여기에있는 문제는 당신의 control.value가 Date 객체가 아니라 문자열 표현이라는 것입니다.

var today = new Date(); 

년 당 MS에 의해 현재의 타임 스탬프와 입력 된 값

var diff = today - new Date(control.value); 

나누기 (밀리 초)의 차이와 적절한에 대해 무엇을해야 비교

var calcAge = Math.floor(diff/ (1000*60*60*24*365))); 

가 지금 바닥을 값. 너는 너의 나이 대상이 무엇인지 우리에게 보여주지 않았으니 너는 네가 찾고있는 비교가 뭔지를 실제로 알지 못한다.

if (calcAge < someAgeThreshold)){ 
    return {invalidDate: true} 
} else { 
    return null; 
} 

또한 당신이 null을 반환하고 값이 무엇이든은 오류가있는 것으로 간주 될 때 지정 유효성 검사와 유효성 검사기가 오류를 반환하지 있습니다.

+0

당신은 최고입니다 !! 고맙습니다!! –

+0

반갑습니다. 그 답이 완벽하고 기능적인 유효성 검사기를 얻는 데 도움이된다면 허용 된 대답으로 표시해도 될까요? – silentsod

+0

하나 더 빠른 질문 ... validateDob 루틴에서 ... 나는 입력 필드의 값을 얻는 데 문제가있다 ... 나이. 제 동료는 @viewchild를 사용하면서이 경험이 있다고 말합니다. –

관련 문제