답변:
ng-dirty
클래스는 반면, 양식, 사용자에 의해 수정되었습니다 있음을 알려줍니다 ng-pristine
클래스는 양식이 사용자에 의해 변경되지 않았 음을 알려줍니다. 그래서 ng-dirty
와 ng-pristine
같은 이야기의 양면이다.
클래스는 모든 필드에 설정되는 반면 양식에는 $dirty
및 $pristine
.
이 $scope.form.$setPristine()
함수를 사용하여 양식을 원래 상태로 재설정 할 수 있습니다 (AngularJS 1.1.x 기능입니다).
$scope.form.$setPristine()
AngularJS의 1.0.x 브랜치에서도 -ish 동작 을 원하면 자체 솔루션을 롤링해야합니다 ( 여기 에서 꽤 좋은 솔루션을 찾을 수 있습니다 ). 기본적으로 이것은 모든 양식 필드를 반복하고 $dirty
플래그를 false
.
도움이 되었기를 바랍니다.
pristine은 필드가 아직 처녀인지 여부를 알려주고 dirty는 사용자가 관련 필드에 이미 아무것도 입력했는지 여부를 알려줍니다.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
<form ng-app="" name="myForm">
<input name="email" ng-model="data.email">
<div class="info" ng-show="myForm.email.$pristine">
Email is virgine.
</div>
<div class="error" ng-show="myForm.email.$dirty">
E-mail is dirty
</div>
</form>
단일 keydown 이벤트를 등록한 필드는 더 이상 순수하지 않으며 (더 이상 원시 상태가 아님) 영원히 더럽습니다.
두 지시문은 분명히 동일한 목적을 수행하며, 앵귤러 팀이 둘 다 DRY 원칙을 방해하고 페이지의 페이로드를 추가하는 것으로 보이지만, 둘 다 사용하는 것이 여전히 실용적입니다. css 파일에서 스타일링에 사용할 수있는 .ng-pristine 및 .ng-dirty가 모두 있으므로 입력 요소의 스타일을 지정하는 것이 더 쉽습니다. 이것이 두 가지 지시문을 모두 추가 한 주된 이유라고 생각합니다.
.ng-pristine
과는 .ng-dirty
다른 CSS 스타일을 허용 - 이것은 repitition 뒤에 가장 정확한 이유를 보인다
이전 답변에서 이미 언급했듯이은 ng-pristine
필드가 수정되지 않았 음을 나타내는 반면 ng-dirty
은 필드가 수정되었음을 알리기위한 것입니다. 왜 둘 다 필요한가요?
필드 사이에 전화 및 이메일 주소가있는 양식이 있다고 가정 해 보겠습니다. 전화 또는 이메일이 필요하며 각 필드에 잘못된 데이터가있는 경우 사용자에게 알려야합니다. 이것은 사용하여 수행 할 수 있습니다 ng-dirty
와 ng-pristine
함께 :
<form name="myForm">
<input name="email" ng-model="data.email" ng-required="!data.phone">
<div class="error"
ng-show="myForm.email.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.email.$invalid && myForm.email.$dirty">
E-mail is invalid
</div>
<input name="phone" ng-model="data.phone" ng-required="!data.email">
<div class="error"
ng-show="myForm.phone.$invalid &&
myForm.email.$pristine &&
myForm.phone.$pristine">Phone or e-mail required</div>
<div class="error"
ng-show="myForm.phone.$invalid && myForm.phone.$dirty">
Phone is invalid
</div>
</form>
ng-pristine ($ pristine)
Boolean 양식 / 입력이 아직 사용되지 않은 경우 True ( 사용자가 수정하지 않음 )
ng-dirty ($ dirty)
Boolean 양식 / 입력이 사용 된 경우 True ( 사용자가 수정 )
$ setDirty (); 양식을 더티 상태로 설정합니다. 이 메소드를 호출하여 'ng-dirty'클래스를 추가하고 양식을 더티 상태 (ng-dirty 클래스)로 설정할 수 있습니다. 이 메소드는 현재 상태를 상위 양식에 전파합니다.
$ setPristine (); 양식을 원래 상태로 설정합니다. 이 메서드는 양식의 $ pristine 상태를 true로, $ dirty 상태를 false로 설정하고, ng-dirty 클래스를 제거하고 ng-pristine 클래스를 추가합니다. 또한 $ submitted 상태를 false로 설정합니다. 이 메서드는이 양식에 포함 된 모든 컨트롤에도 전파됩니다.
양식을 원래 상태로 다시 설정하는 것은 양식을 저장하거나 재설정 한 후 '재사용'하려는 경우 유용합니다.