我有一个html表单,我正在使用angular js为每个输入添加验证。
但是我不希望在加载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>
这个表格按照我的预期运作。现在,如果用户直接单击提交按钮而不对输入进行任何更改,则$ pristine状态仍为true,现在显示错误。但在这里,我想向用户显示验证错误。
这就是为什么在提交时,我想将表单的$ pristine状态设置为false,但我没有看到它的方法。
我也尝试使用$ dirty代替$ pristine,如:
<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,但我没有任何这样的选项。但是对于这种情况,如果我使用$ pristine我有$ setPristine()。
所以在这种情况下无论我使用$ dirty还是$ pristine,我都有一个问题。
请告诉我可能是什么解决方案。
答案 0 :(得分:1)
$ pristine和$ dirty应该一起工作。使用$setPristine
会将格式的$pristine
属性设置为true,将$dirty
设置为false。 $setDirty
会做相反的事情。
您的问题似乎与您正在测试表单字段的$pristine
和$dirty
属性这一事实有关(请参阅https://docs.angularjs.org/api/ng/type/ngModel.NgModelController)。在表单控制器上执行$setPristine
也会传播到表单的每个字段,而$setDirty
则不会。{/ p>
您可以查看设置属性的角度源代码(#setPristine和#setDirty),此代码部分明确且易于阅读:https://github.com/angular/angular.js/blob/master/src/ng/directive/form.js
答案 1 :(得分:0)