首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的数据驱动模板

嵌套的数据驱动模板
EN

Stack Overflow用户
提问于 2016-12-13 16:51:18
回答 2查看 108关注 0票数 2

我有嵌套的地址组件,我想在我的外部表单中重用它,它工作得很好,但问题是当我想要重复的地址( add() )按钮时。

你可以检查这个柱塞,我的推送()似乎不工作,我不明白为什么,有人可以在这里更新这个柱塞

代码语言:javascript
复制
 ngOnInit() {
    this.form = this.fb.group({
      title: [''],
      address: this.fb.array([])
    });
  }

  add(){

    this.form.get('address').push(this.fb.control(this.adress.form))
  }

和模板是

代码语言:javascript
复制
<address-control *ngFor="let control of form.get('address').controls; let i = index" formGroupName="{{i}}"></address-control>
EN

回答 2

Stack Overflow用户

发布于 2016-12-13 17:13:22

这可能是因为this.adress.form,应该是:this.form.adress

试试这个:

代码语言:javascript
复制
add(){
  this.form.get('address').push(this.fb.control(this.form.adress))
}

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2016-12-14 01:55:32

我相信这里需要的是用一个虚拟的track by函数来跟踪*ngFor,以防止它在任何时候进行更改时重新初始化我们的组件,并在初始化address组件时结合setControl和一个额外的输入,以便我们可以设置正确的控件:

main.component.html

代码语言:javascript
复制
 <div formArrayName="addresses">
    <address-control [formArrayInput]="form.controls['addresses']" [index]="i"
      *ngFor="let address of form.controls['addresses'].controls; let i = index;trackBy:trackByFn"></address-control>
  </div>

main.component.ts我们将推送一个虚拟组,它将被address组件覆盖:

代码语言:javascript
复制
add(){
   this.form.controls['addresses'].push(this.fb.group({}));
}

trackByFn(index, item) {
   return 0;
}

address-control.component.ts

代码语言:javascript
复制
@Input() formArrayInput;
@Input() index;
form;

ngOnInit() {
  console.log(this.formArrayInput);
  this.form = this.fb.group({
    street: '',
    city: ''
    zip: ''
  });
  this.formArrayInput.setControl(this.index, this.form);
}

这是从你的Plunker派生的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41116906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档