【发布时间】:2017-10-23 22:38:58
【问题描述】:
我正在使用 FormBuilder 构建表单:
this.myForm = this.fb.group({
'name': new FormControl(null, Validators.min(5)),
'description': new FormControl(null, Validators.min(60))
});
问题是我还应该验证它是否需要,我通过这样构建的地图从配置中获取它:
map = new Map<string, boolean>();
map.set('name', true);
map.set('description', false);
问题可以解决如下:
this.myForm = this.fb.group({
'name': this.map.get('name') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(5)])) : new FormControl(null, Validators.min(5)),
'description': this.map.get('description') ? new FormControl(null, Validators.compose([Validators.required, Validators.min(60)])) : new FormControl(null, Validators.min(60))
});
这行得通,但想象一下,在具有多个字段的多个表单的大型应用程序中,这种方式真的很不舒服。理想情况下,它看起来像这样:
Object.keys(this.myForm.controls).forEach(key => {
if (map.get(key)) {
this.myForm.get(key).setValidators(this.myForm.get(key).getValidators().push(Validators.required))
}
});
这种方式当然行不通。因此,如果有人已经解决了这个问题或者有一个很好的方法来做上面描述的事情,我会非常感谢你。先谢谢了!!!
更新:问题可以简化为“如何获取与 FormControl 关联的所有验证器”。我认为这个问题没有明确的解决方案 --> https://github.com/angular/angular/issues/13461
【问题讨论】:
-
为什么这种方式行不通?
-
Angular 2-4 中不存在 .getValidators() 方法,或者至少我没有找到类似的东西。但是,如果 Angular 2 - 4 中存在 .setValidators () 方法。
-
检查我的答案
标签: javascript angular typescript