【问题标题】:Using nested objects in FormBuilder在 FormBuilder 中使用嵌套对象
【发布时间】:2017-11-02 13:41:58
【问题描述】:

所以我有这个表单,它工作正常.. 但现在我想扩展一些 json 结构......

https://plnkr.co/edit/aYaYTBRHekHzyS0M7HDM?p=preview

我要使用的新结构如下所示(仅地址:已更改)

  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.minLength(5)]],
  address: this.fb.array([{
    name: '',
    addressLine1: ['', [Validators.required]],
    city: ['', [Validators.required]],
    postalCode: [Validators.required],
  }]),

但我不断收到诸如“ERROR TypeError: control.registerOnChange is not a function”之类的错误。发现这与缺少 formControlName 有关,但我不希望所有数据都显示..

在输入字段中,我只希望显示 addressLine1(根本不显示姓名、城市或邮政编码)。

【问题讨论】:

  • 那么address控制下的文件什么时候使用?抛出错误,因为不再有 formControl 命名地址,而是 FormArray
  • 我也认为你误解了FormArray的使用
  • 我已经更新了 plunkr 以显示它以后在哪里使用..

标签: forms angular angular2-formbuilder


【解决方案1】:

我会为address 使用表单组而不是表单数组,所以它看起来像这样:

this.registrationForm = fb.group({
  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.minLength(5)]],
  address: this.fb.group({ // make a nested group
    name: '',
    addressLine1: ['', [Validators.required]],
    city: ['', [Validators.required]],
    postalCode: [Validators.required],
  }),
});

然后在你的模板中,记得标记formGroupName

<md-input-container formGroupName="address"> <!-- Mark the nested formgroup name -->
   <input mdInput type="text" placeholder="AddressLine1" name="address" 
         formControlName="addressLine1" fodiGoogleplace 
         (updateAdress)="setAdressOnChange($event)">
</md-input-container>

你的分叉PLUNKER

【讨论】:

  • 这正是我最终做的:)
  • 太棒了!是的,如果您想在其中推送多个address-formgroups,FormArray 将是一个很好的解决方案。但很高兴解决方案令人满意!祝你有美好的一天,快乐的编码! :)
猜你喜欢
  • 1970-01-01
  • 2017-12-21
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2018-10-12
  • 2017-02-22
  • 1970-01-01
相关资源
最近更新 更多