0

我最近开始使用 Angular 2 和响应式表单。我想要完成的事情很简单:在表单内创建一个数组并让用户将新对象推入其中(比如用户可以添加新地址的用户地址列表 - 标准 FormArray)。这很简单(并且在文档中都有很好的描述),但我也希望能够自动验证用户的输入。我知道我可以通过简单地推动这样的组来做到这一点:

this.formBuilder.group({
    country: ['', Validators.required],
    city: ['', Validators.required],
    ...
})

但我有一个代表地址实例的模型,我想这样使用它:

this.formBuilder.group(new Address())

这实际上就是我现在的做法(未经验证)。

我的问题是:我是否可以在每次推送新的空白地址时使用这一行初始化空白地址并以某种方式进行验证而无需明确定义我的验证器?

如果我的问题不够清楚,我会回答你所有的问题。

4

1 回答 1

0

这可能是您的一个选择:

this.formBuilder.group(new Address(),
                       {validator: (fg: FormGroup) => this.attachValidators(fg)})

基本上设置一个自定义验证器,它通过地址集合的各个控件并根据需要设置它们的各个验证器属性。见下文:

//helper method
private attachValidators(address: FormGroup)/*: ValidationErrors */ {
    for (let ctrlName of Object.keys(address.controls)) {
        address.get(ctrlName).setValidators(Validators.required);
    }
}

如果您考虑验证器的重复分配,可能太多了

于 2017-09-26T12:25:03.400 回答