Angular js将form设置为Pristine false



我有一个html表单,我正在使用angular js为from中的每个输入添加验证。

但我不想在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>

这个表格和我预想的一样有效。现在,如果用户直接单击提交按钮,而不对输入进行任何更改,则$pure状态仍然为true,并且现在显示错误。但在这里,我想向用户显示验证错误。

这就是为什么在提交时,我想将表单的$pure状态设置为false,但我看不到它的方法

我也试过使用$dirty而不是$pureal,比如:

<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,但我没有任何这样的选项。但在这种情况下,如果我使用$pureal,我就有$setPristine()。

因此,在这种情况下,无论我使用$dirty还是$pure,我都有一个问题。

请告诉我可能的解决方案。

$pureal和$dirty应该一起工作。使用$setPristine会将形式的$pristine属性设置为true,将$dirty设置为false。$setDirty则相反。

您的问题似乎与您正在测试表单中某个字段的$pristine$dirty属性有关(请参阅https://docs.angularjs.org/api/ng/type/ngModel.NgModelController)。在表单控制器上执行$setPristine也会传播到表单的每个字段,而$setDirty则不会。

您可以查看angular的源代码,其中设置了属性(#setPristine和#setDirty),此代码部分明确且易于阅读:https://github.com/angular/angular.js/blob/master/src/ng/directive/form.js

在这种特定情况下,您不需要将form设置为任何值。

您只需将支票更改为:

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

我建议您使用这个指令。

还要检查教程

最新更新