我需要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然后它将调用自身来验证其子对象。到目前为止,这个函数运行良好,但它需要一些额外的优化。