是否有一种方法可以在提交时触发所有被动形式的验证器,而不仅仅是“脏”和“触摸”事件?
这样做的原因是我们有一个非常大的表单,它不表示是否需要字段,用户可能会错过一些必需的控件,因此在提交时,预计会丢失所有错误的字段最终用户将被显示 .
我已经尝试通过使用标记将表单标记为“触摸”
FormGroup.markAsTouched(true);
它工作,所以我也尝试将其标记为“脏”
FormGroup.markAsDirty(true);
但是 class 的css仍然是“原始的”,
有没有办法从组件手动触发它,我试着谷歌搜索无济于事,谢谢你提前!
UPDATE
我已经通过迭代FormGroup.controls并将其标记为“脏”来完成它,但是有一种“标准”方法来执行此操作 .
8 回答
这可以通过 here 示例实现,您可以使用
NgForm
指令:然后在验证消息中检查表单是否已提交:
有多种方法可以解决问题 . 如果你有嵌套的表单组,@ Splaktar的答案将不起作用 . 所以,这是适用于嵌套表单组的解决方案 .
Template code:
component.ts code:
component.ts code
Template code:
几个月后回来,我在这里分享基于所有评论的改进版本,仅供记录:
希望它会有用!
这可以通过markAsTouched()完成 . 在PR #26812合并之前,您可以使用
您可以在source code找到更多信息 .
我找到了一些可能感兴趣的东西:
在提交时,我设置了
submitAttempt = true
并将其放在应该进行验证的div中:nickname.touched || nickname.dirty || (nickname.untouched && submitAttempt)
含义:如果没有被触及,我们尝试提交,则错误显示 .
我的应用程序有很多表单和输入,所以我创建了各种自定义表单组件(用于普通文本输入,textarea输入,选择,复选框等),这样我就不需要重复详细的HTML / CSS和表单验证UI逻辑在这个地方 .
我的自定义基本表单组件查找其主机
FormGroupDirective
并使用其submitted
属性以及FormControl
状态(valid
,touched
等)来确定哪些验证状态和消息(如果有)需要在UI上显示 .这个解决方案
不需要遍历表单的控件并修改其状态
不需要为每个控件添加一些额外的
submitted
属性不需要在
ngSubmit
-bindedonSubmit
方法中进行任何其他表单验证处理没有将模板驱动的表单与反应形式相结合
form-base.component:
form-text.component:
form-text.component.html:
Usage:
如果我得到你要求的东西 . 您只想更新每次提交的验证消息 . 执行此操作的最佳方法是存储控件状态的历史记录 .
然后在html代码* ngIf =“!validationChecker('formControlName')”中显示错误消息 .
“脏”,“触摸”,“提交”可以使用下一个方法组合: