2014-02-19 2 views
0

AngularJS를 사용하여 일부 유효성 검사를 구현하려고합니다. 범위의 개체 목록에 바인딩 된 입력 목록이 있고 각 입력의 값이 입력의 값보다 크거나 같음을 확인하려고합니다 (숫자 값만 입력한다고 가정합시다.다른 스코프 속성 값에 의존하는 AngularJS 유효성 확인

  • 새로운 값은 여전히 ​​이상의 목록 아니라면 첫번째 항목 (이전 항목 같다 :이 값이 변경되면 때를 체크해야한다는 것을 의미

    입력))

  • 후속 목록 항목 (있는 경우)은 여전히 ​​새로 변경된 값보다 크거나 같음

이 문제를 해결하는 가장 좋은 방법은 확실치 않지만 가능한 한 AngularJS 유효성 검사 프레임 워크를 사용하는 것이 좋습니다. 내가 이렇게 예를 발견했습니다 검증을

을 수행하기 위해 사용자 지정 지침을 작성,하지만 난 여기에 2 개 질문 :

1 : 내가 3 개 가능한 솔루션을 참조

  • 이 어떻게 범위에 액세스 할 속성 상대 범위
    속성의 현재 유효성을 검사하고 있습니까?
  • 예를 들어, 인덱스 1에서 바인드 된 입력 값이 인 경우, 인덱스 1의 값을 변경하면 무효화되었을 수 있으므로 지시문을 트리거하여 인덱스 2의 범위 인 입력 값 을 재평가 할 수 있습니까? 지금까지 방금 지시문 함수가 변경된 바인딩에 대해서만 트리거된다는 것을 보았습니다.

2 : 나는 유효성 검사 기능으로 목록 항목의 인덱스를 제공 할 수 있었다이 경우 △ ▽를 사용하여 유효성 검사

. 즉, 평가를 위해 이전 목록 항목의 값에 액세스 할 수있었습니다. 그러나 방금 변경된 항목에 대해서만 해고되었다는 문제는 여전히 남아있었습니다. 목록의 다음 항목은 재평가하지 않았습니다.

3 :

내가이 일에 대한 jsFiddle있어 각 행 입력 값에 OnChange 이벤트 핸들러를 구현 : http://jsfiddle.net/zs9kJ/1/

그러나이 경우

, 나는 방법을 모른다 핸들이있는 모든 것이 기본 스코프 속성 인 경우 $ setValidity 함수를 호출합니다. 전혀 AngularJS와 검증 프레임 워크를 건드리지 않고

  if (eval($scope.items[i].value) < eval($scope.items[i - 1].value)) { 
       $scope.items[i].$setValidity('notinorder', false); 
      } 

내가, 내가이 두번째 방법을 사용하여 구현할 수 있습니다 생각 -하지만 그것을 사용 않는 '올바른'방법이 있다면, 내가 좋아하는 것 : 아래의 코드는 실패 알고 계십시오 ...

답변

0

row 변수를 유효성 검사 함수에 전달하고 여기에 유효성을 설정해야합니다. 여기 예가 있습니다 : http://jsfiddle.net/fH755/

+0

나는 이것이 옳다고 생각하지 않습니다.입력 및 인덱스 1을 변경하여 change 이벤트 핸들러로 전달 된 행 매개 변수가 인덱스 1의 행을 나타낼 것이라고 가정 해 보겠습니다. 그러나 행 1의 변경이 실제로 인덱스 2의 값을 무효화한다고 가정 해 봅시다. 인덱스 2에있는 행의 유효 플래그 - 인덱스 1에있는 행이 아닌, –

+0

이 접근법은 무엇입니까? http://jsfiddle.net/gLpgu/ – Goodnickoff

+0

예,이 기능은 작동합니다. AngularJS 유효성 검사 지원을 전혀 사용하지 않는다는 것을 알았습니다. 내 게시물은 AngularJS의 유효성 검사 기능을 가능한 한 많이 사용하여이 문제를 해결하는 방법을 찾는 것이 었습니다. 모든 것을 '수동으로'하지 않고도 문제를 해결할 방법이 없다면 수치 스러울 것입니다. –

관련 문제