2016-08-03 2 views
0

У меня есть html-форма, и я добавляю валидацию к каждому входу внутри, используя угловые js.Угловая js set form to Pristine false

Но я не хочу показывать ошибку проверки первоначально, когда html загружается, пока пользователь не внесет некоторые изменения в форму.

Так что я валидацию как:

<form name="addApplicationForm" accept-charset="UTF-8" novalidate> 
    <input type="text" name="name" ng-model="applicationData.application_name" required> 
    <div ng-show="addApplicationForm.name.$invalid && !addApplicationForm.name.$pristine"> 
     <span class="error" ng-show="addApplicationForm.name.$error.required">Please enter application name.</span> 
    </div> 
    <button ng-click="submit()">Submit</button> 
</form> 

И эта форма работает, как я ожидал. Теперь, если пользователь нажимает кнопку «Отправить» без внесения каких-либо изменений во вход, состояние $ netist по-прежнему истинно, и теперь отображается ошибка. Но здесь я хочу показать ошибку проверки правильности.

Именно поэтому в submit, я хочу установить $ первозданное состояние формы в false, но я не вижу метода для него.

Я также попытался с $ загрязнен вместо $ нетронутым, как:

<form name="addApplicationForm" accept-charset="UTF-8" novalidate> 
    <input type="text" name="name" ng-model="applicationData.application_name" required> 
    <div ng-show="addApplicationForm.name.$invalid && !addApplicationForm.name.$dirty"> 
     <span class="error" ng-show="addApplicationForm.name.$error.required">Please enter application name.</span> 
    </div> 
    <button ng-click="submit()">Submit</button> 
</form> 

А представить я просто вызвать метод SetDirty сделать форму грязной и, таким образом, он показывает ошибку на кнопку мыши представить.

Но здесь проблема в том, что у меня также есть кнопка сброса в форме. После щелчка, я хочу очистить все поля формы, а затем мне нужно сделать флагом грязной формы в false, но у меня нет такой опции. Но для этого случая, если я использую $ первозданный, у меня есть $ setPristine().

Так что в этом случае, независимо от того, что я использую $ грязный или нетронутый, у меня есть одна проблема.

Скажите, пожалуйста, какое решение может быть.

+0

Если ответа недостаточно, предоставьте минимальный рабочий фрагмент с помощью кнопки отправки и возврата. – zoom

ответ

1

$ Природные и грязные должны работать вместе. Используя $setPristine, установите $pristine свойство формы на значение true и $dirty на значение false. $setDirty будет делать наоборот.

кажется, что ваша проблема связана с тем, что вы проверяете $pristine и $dirty свойства поля вашей формы (см https://docs.angularjs.org/api/ng/type/ngModel.NgModelController). Выполнение $setPristine на вашем контроллере формы также распространяется на все поля формы, а $setDirty - нет.

Вы можете посмотреть на исходный код углового, где установлены свойство (#setPristine и #setDirty), это часть кода явно и легко читать: https://github.com/angular/angular.js/blob/master/src/ng/directive/form.js

+0

Спасибо, он работает.На самом деле я не знал, что $ setDirty делает форму грязной, а не поля ввода, и если я использую setPristine, она делает эту форму грязной как false. – Indra

0

В данном конкретном случае не нужно устанавливать form на что угодно.

Вы просто должны изменить свой чек:

<div ng-show="addApplicationForm.name.$invalid && addApplicationForm.name.$dirty"> 

Я бы рекомендовал использовать this директиву.

Также необходимо проверить это tutorial.