即使在表单活动验证状态下,如何仅在提交时验证角度表单

Posted

技术标签:

【中文标题】即使在表单活动验证状态下,如何仅在提交时验证角度表单【英文标题】:How to validate angular form only on submit even at form active validation state 【发布时间】:2017-05-19 15:44:14 【问题描述】:

我有一个表单,我必须仅在提交表单时进行验证,我使用以下角度语法成功完成了该表单

form1.inputvalue.$invalid && form1.$submitted

现在,一旦显示错误并开始验证实时输入(或键盘输入)更改的值。我的客户不想在 keyup 上验证它,并且在更改输入时应该隐藏消息,并且应该在第二次单击提交按钮时再次验证。听起来很奇怪,但需要:)。

我在 ng-change 输入时尝试了 ng-hide="true"。但它没有在控制台中触发。你能帮我我在哪里失踪

$scope.hidevalidate = function()
		console.log("coming to hide");
		$scope.hidevalidation = true;
		console.log("hidden");
	;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<form name="frmdata" novalidate>
<input type="text" 
       class="class1"  
       name="item1" 
       ng-model="frmdata.item1" 
       id="item" 
       ng-change="hidevalidate()"
       ng-blur="focusout('item1');"
       ng-disabled="disableItem1"
       ng-pattern="/^([0-9]1,25)?$/"
       ng-model-options="allowInvalid: true">
  </input>
<div ng-show="frmdata.item1.$invalid && form1.$submitted" >
<div ng-hide="hidevalidation" class="error-message">Item should not be empty (or) only numbers allowed</div>
</div>
</form>

【问题讨论】:

请添加更多代码说明您的操作方式或创建一个 plunkr 【参考方案1】:

您可以使用form1.$setPristine() 将表单标记为全新的,所以理论上它应该就像您第一次来到该页面一样(所以如果您的逻辑第一次正确处理,它应该之后也是如此)。

见https://docs.angularjs.org/api/ng/type/form.FormController

【讨论】:

试过 $setPristine.,但没有用。经过一番谷歌搜索,我发现它可以将验证重置阶段设置为 $dirty 但不是 $invalid.. 所以我什至将错误消息更改为 form1.item.$dirty.,但仍然没有触发。我试过调试,断点正在进入函数并设置 $setpristine 'Undefined'【参考方案2】:

您可以在单击提交按钮时调用一个方法来执行所有检查,并将属性 novalidate 添加到表单中,这样它就不会检查任何内容,因为此方法会检查所有内容并设置所有错误(如果有的话)。

【讨论】:

以上是关于即使在表单活动验证状态下,如何仅在提交时验证角度表单的主要内容,如果未能解决你的问题,请参考以下文章

表单提交时的角度表单错误组件触发验证

表单验证错误消息以角度提交时显示

使用 Jquery Validator 出现验证错误时如何避免或禁用表单提交

以角度验证电子邮件模式

角度模糊验证阻止提交单独的表单

表单未验证角度 2 中 [ngClass] 的使用