我需要ng-form="myForm"
根据范围变量启用/禁用 Angular 表单或子表单中的所有验证规则$scope.isValidationRequired
。因此,如果isValidationRequired
是false
,则为指定字段组设置的任何验证都不会运行,结果将始终为myForm.$valid==true
,否则,验证规则将照常运行。
我做了很多研究,并意识到这个功能在 Angular 中是不可用的。但是,我发现了一些附加组件或进行了一些自定义,这是可能的。
例如,我可以使用带有自定义指令的附加angular-conditional-validation(github和demoenable-validation="isValidationRequired"
) 。这将是完美的,除了我不能将此功能应用于ng-form
. 我必须为每个适用的字段添加此指令。
另一种解决方案是使用 Angular$validators
管道使用自定义验证。这需要一些额外的努力,而且我没有时间,因为 sprint 快结束了,我必须在几天内给出一些结果。
如果您有任何其他建议,请发布答案。
用例:
为了澄清这一点,我将提到用例。最终用户可以用无效数据填写表单,他可以单击Save
按钮,在这种情况下,不应该触发验证规则。只有当用户单击时,才Validate and Save
应触发验证规则。
解决方案:
在此处查看最终的 plunker 代码。
更新:根据下面的评论,如果在ng-form
. 需要更多的努力来调试和解析这个发行者。如果只使用一个级别,那么它工作正常。
更新:这里的 plunker更新了更通用的解决方案。现在该代码将使用具有子表单的表单ng-form
。该函数setAllInputsDirty()
检查对象是否$$parentForm
为停止递归。此外,changeValidity()
将检查对象是否是一个表单,$addControl
然后它将调用自身来验证其子对象。到目前为止,这个函数运行良好,但它需要一些额外的优化。