5 ответов:
The
ng-dirtyкласс говорит вам, что форма была изменена Пользователем, в то время какng-pristineкласс говорит вам, что форма не была изменена пользователем. Так чтоng-dirtyиng-pristineдве стороны одной и той же истории.классы организованы на любом поле, в то время как форма имеет два свойства,
$dirtyи$pristine.можно использовать
$scope.form.$setPristine()функция для сброса формы в первозданное состояние (обратите внимание, что это AngularJS 1.1.икс особенность.)если вы хотите
$scope.form.$setPristine()-иш поведение даже в 1.0.X ветвь AngularJS, вам нужно свернуть свое собственное решение (некоторые довольно хорошие можно найти здесь). В принципе, это означает повторение всех полей формы и установку их$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, больше не является девственным (нетронутым) и поэтому грязным навсегда.
обе директивы, очевидно, служат одной и той же цели, и хотя кажется, что решение угловой команды включить оба мешают сухому принципу и добавляют к полезной нагрузке страницы, все же довольно практично иметь их обоих вокруг. Легче стилизовать входные элементы, поскольку у вас есть как .ng-pristine, так и .ng-dirty, доступные для стилизации в ваших файлах css. Я думаю, что это было основной причиной для добавления обеих директив.
как уже говорилось в предыдущих ответах,
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)
логическое значение True, если форма / вход еще не используется (не изменено)
ng-dirty($dirty)
логическое значение True, если была использована форма/вход ( изменено пользователем)
$setDirty(); Устанавливает форму в грязное состояние. Этот метод можно вызвать для добавления класса' ng-dirty ' и установить форма в грязное состояние (ng-грязный класс). Этот метод будет распространять текущее состояние на родительские формы.
$setPristine(); Устанавливает форму в ее первозданное состояние. Этот метод устанавливает $pristine состояние формы true, $dirty состояние false, удаляет ng-dirty класс и добавляет ng-pristine класс. Кроме того, он устанавливает состояние $submitted в false. Этот метод также распространяется на все элементы управления, содержащиеся в этой форме.
настройки формы возврат к первозданному состоянию часто бывает полезен, когда мы хотим "повторно использовать" форму после ее сохранения или сброса.
Comments