【问题标题】:Can I use one line initialization of a blank address and have validation我可以使用空白地址的一行初始化并进行验证吗
【发布时间】:2017-11-15 05:06:10
【问题描述】:

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

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

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

this.formBuilder.group(new Address())

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

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

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

【问题讨论】:

  • 您需要手动验证吗?..

标签: angular2-forms angular-reactive-forms


【解决方案1】:

这可能是您的一个选择:

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);
    }
}

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

【讨论】:

猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 2019-05-12
  • 2021-11-30
  • 2016-10-22
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多