1

ng-book jsbin에있는 예제를 복제하려고합니다. 여기

plnkr

는 app.js입니다

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.fields = [{placeholder: 'Email', isRequired: true}, 
       {placeholder: 'Password', isRequired: true}, 
       {placeholder: 'Comment(Optional)', isRequired: false}] 
    $scope.formSubmit = function(){ 
    for (var i=0; i < $scope.fields.length; i++) 
    { var obj = $scope.fields[i] 
     for (var key in obj){ 
     if(obj.hasOwnProperty(key)){ 
      alert(key + ' : ' + obj[key]) 
     } 
     } 
    } 
    }     
}); 

HTML

<html ng-app="plunker"> 

    <head><script data-require="[email protected]"  src="https://code.angularjs.org/1.2.22/angular.js" data-semver="1.2.22"></script> 
<script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <form name='main_form' ng-submit='formSubmit()' novalidate> 
    <div ng-repeat="field in fields" ng-form="dynamic_form"> 
    <input type='text' 
      name='dynamic_input' 
      ng-required='field.isRequired' 
      ng-model='field.name' 
      placeholder='{{field.placeholder}}'> 
     <div ng-show="dynamic_form.dynamic_input.$dirty && dynamic_form.dynamic_input.$invalid"> 
      <span ng-show="dynamic_form.dynamic_input.$error.required"> This field is required.</span> 
     </div> 
     </div> 
     <button type='submit' ng-diabled="main_form.$pristine && main_form.$invalid">Submit  All</button> 
    </form> 
    </body> 

</html> 

문제 내가 여기에 직면하고 있습니다 :

  1. 를 제출 '버튼을
  2. 를 비활성화되지 않습니다
  3. 필수 입력란에 오류가 표시되지 않습니다.
  4. 제출을 클릭하면 알림에 $ 해시 키가 표시됩니다. 왜 그런가요?

감사합니다.

+0

다른 방법으로 유효성 검사를하는 또 다른 예를 보여줄 수 있습니까? –

+0

물론입니다. 대부분 환영합니다. – Indyarocks

답변

2

1) 제출 버튼은 당신이 ng-disabled해야 오타가

를 비활성화되지 않습니다. 또한 경우에 무효를 사용하지 않도록 조건을 변경 : - 필수 항목에 대한

<button type='submit' ng-disabled="main_form.$invalid">Submit All</button> 

2) 오류가 표시되지 않습니다.

지금 당신이 내가 경고에뿐만 아니라 $ 해시 키를 얻고, 제출을 클릭하면 값

3)에 입력 제거 할 때 표시됩니다. 왜 그런가요?

각도는 반복되는 항목을 추적하는 고유 키 ($$ hashkey)를 추가합니다. ng-repeat (고유 키 여야 함)에 track by을 지정하면 추가하지 않습니다. 귀하의 경우에는 ID가 없기 때문에 아무 것도 연관되어 있지 않으므로 $index을 사용할 수 있습니다. 당신은 당신의 제출 버튼에 단어 "장애인"맞춤법이 틀린

ng-repeat="field in fields track by $index" 

Demo

+0

고마워. 특히 데모를위한 여분의 노력을 위해 :) – Indyarocks

+0

당신은 환영 받았다. .. – PSL

+1

나는하지 않았다 : P 언제든지 환영한다. :) 각도에 관한 stackoverflow에서 많은 질문을 볼 수있다. 나는 최근에 angularjs를 배우기 시작했습니다. – Indyarocks

2

(데모에서 나는 ID 속성을 추가로 추적하는 것을 사용했다).

더티의 오류 만 표시하고 싶다고 명시 적으로 말했습니다. 그래서 당신은 뭔가를 채울 때까지 그들을 보지 못할 것이고, 다시 그것을 삭제할 것입니다. 필드가 채워질 때까지 오류를 보려면 더티 검사를 제거하십시오.

<div ng-show="dynamic_form.dynamic_input.$dirty && 

$$ hashKey가 ngRepeat의 일부로 추가되었습니다. 이러한 속성을 피하기 위해 AngularJS는 내부적으로 (angular.toJson의 경우) 다음 테스트를 수행합니다.

key.charAt(0) === '$' && key.charAt(1) === '$' 

또한 hasOwnProperty를 확인하는 것을 피하기 위해 angular.forEach를 사용할 수 있지만이 중 하나를 '$$'변수를 생략하지 않습니다.