2016-07-18 2 views
2

내 AngualrJS (1.x) 응용 프로그램에 텍스트 상자 유효성 검사를 수행 할 사용자 지정 지시문이 있습니다. 지시문은 요소로 사용해야합니다. 유효성을 검사해야하는 텍스트 상자는 지시문 요소 내부에 있어야합니다. 이 지시자에는 유효성 확인 논리가있는 컴파일 함수가 있습니다.AngularJS 지시문의 컴파일 함수가 ng-if 내부에 지시문이있는 경우 실행되지 않음

지시문이 제대로 작동합니다. 하지만 라디오 버튼 클릭에 따라 텍스트 상자를 표시하거나 숨길 필요가있는 시나리오가 있습니다. 이를 위해 ng-if 내부 지시문을 유지하려고 시도했지만 지시문이 ng-if 내부에 있으면 컴파일 기능이 트리거되지 않습니다. 나는 링크 기능에 로직을 유지하려했지만 링크 기능도 트리거되지 않았다. 측면 ng-show에 지시문을 보관할 수 없습니다. 왜냐하면 숨겨진 시나리오 중에도 필수 필드 유효성 검사가 여전히 활성화되어 있으며 ng-required에 조건을 사용하고 싶지 않기 때문입니다.

ng-if에서 내 지시어를 실행할 수있는 방법이 있습니까? 나는 왜 그것이 실행되지 않을지 모르겠다. 어떤 도움을 주시면 감사하겠습니다.

+0

'ng-if'에 의해 생성 된 자식 범위의 경우 일 수 있습니다. 표시/숨기기'ng-hide/ng-show'를 사용합니다. –

+0

대신 전체 단락을 작성하면 이해하기 쉬운 fiddlle 또는 plunker를 만들 수 있습니다. –

답변

0

ng-ifng-show 모두는 DOM 요소를 표시/숨기기 위해 사용되지만 그들 사이에 큰 차이는 ng-if="expression"이 요소를 제거한다는 것이다 (물론이 모든 자식의)을 expression이 false로 평가되는 경우 DOM에서.

ng-show="expression".ng-hide 클래스 (display: none을 추가)를 기준으로 요소를 숨 깁니다.

따라서 ng-if을 사용하고 ng-if의 우선 순위가 높기 때문에 표현식이 false로 평가되면 다른 지시문이 실행되거나 컴파일되지 않습니다. 이것이 사용자 지정 지시문이 실행되지 않는 이유입니다.

ng-if 대신 ng-show을 사용하십시오.

편집 : 난 그냥

질문을 다시 읽고 당신이 할 수있는 것을 알게되지 당신이 필요하기 때문에 현장 검증 ng-show. 나는 그것을위한 해결책도 가지고있다. 이것은 해당 필드가 필요한 당신의 체크 박스를 체크 표시합니다 경우

ng-required="sameExpressionAsInNgShow" 

:

대신 사용 requiredng-required과 같은 당신이 (ng-if에서 현재) ng-show에서 사용할 같은 표현을 사용합니다.

+0

죄송합니다! 당신은 또한'ng-required'를 사용하고 싶지 않습니다. –

+0

답장 Shashank를 보내 주셔서 감사합니다. ng-required에서 expression을 사용하고 싶지 않은 이유는 min-length와 같은 다른 유효성 검사가 있기 때문입니다. 사용자가 옵션 버튼을 선택하여 필드를 표시하고 최소 길이를 입력하지 않은 다음 컨트롤을 숨기면 양식도 유효하지 않습니다. 따라서 각 유효성 검사 표시/숨기기를 처리하고 싶지 않습니다. 왜 지시문이 ng-if == true 시나리오에서 실행되지 않는지 이해할 수 없습니다. 나는 지시어의 우선 순위를 2000으로 설정하고 나서 행운을 찾지 않으려 고 노력했다. :( –

+0

오! 'ng-if'가 true로 평가 되더라도 그 지시어가 컴파일되지 않는 경우에도 그렇습니까? 그렇다면 제공하십시오. plunkr/fiddle 또는 StackOverflow 스 니펫. –

관련 문제