javascript
  • angularjs
  • forms
  • angularjs-validation
  • 2014-03-27 1 views 3 likes 
    3

    양식에서 읽기 전용 입력이 변경되고 양식이 유효 할 때마다 특정 작업을 수행하려고합니다. angularjs의 형식 변경 및 유효성

    <form name="form" novalidate> 
        <input ng-model='input.a' required/> 
        <input ng-model='input.b' required/> 
        <input value='{{output.p | number: 2}}' readonly/> 
        <input value='{{output.q | number: 2}}' readonly/> 
    </form> 
    

    지금 input의 변화에 ​​따라, 나는 input.ainput.b이 유효 할 때마다, 뭔가를하고 싶은처럼 내 양식 보인다,의가 있다고 가정 해 봅시다. $watch(input)을 시도했지만 작동하지 않았습니다. 모든 회원들을 지켜 보지만 어리 석다. 모든 필드에 ng-change을 추가하는 것이 좋지만 여전히 바보입니다 (DRY가 아님). 적절한 방법은 무엇입니까?


    다른 질문은 입력이 유효한지 확인하는 방법입니다. 나는 버튼이 있다면, 나는 단순히

    <button ng-click="doIt()" ng-disabled="form.$invalid"> 
    

    을 할 수 있지만 내가 어떻게 (이 $scope에 포함되지 않은 것) 컨트롤러에 form.$invalid 액세스 할 수 있습니까?

    답변

    3

    당신은 여기를 참조하십시오

    $scope.form.$invalid 
    

    을 수행하여 form.$invalid에 액세스 할 수 있어야합니다 : AngularJs can't access form object in controller ($scope)

    양식의 변화를 시청하려면, 당신은 할 수 있어야한다 :

    $scope.$watchCollection('input') 
    
    +1

    두 가지 모두 작동합니다. 하지만 당신의 링크에 따르면,'setFormScope' 없이는 나를 위해 잘 돌아갈 것입니다. ('$ modal.open' 같은 것은 아니고 기본적인 ctrl을 가진 기본 페이지입니다.) 그렇지만 그렇게하지는 않습니다. 어떤 생각? – maaartinus

    2

    @dave는 이미 첫 번째 질문에 답변했지만 두 번째 질문에는 더 세련된 해결책이 있습니다.

    컨트롤러에서

    당신은 예를 들어, 객체를 선언 있습니다

    <form name="forms.someForm"> 
        ... 
    

    마지막으로 컨트롤러에이 같은 일을 할 수 있습니다

    $scope.forms = {}; 
    

    이 그럼 당신은 이름이 해당 객체 내에 중첩되어야한다 형성 :

    if($scope.forms.someForm.$invalid) { 
        ... 
    } 
    
    관련 문제