【问题标题】:unable to get nested formControlName ionic无法获得嵌套的 formControlName 离子
【发布时间】:2018-08-27 06:00:53
【问题描述】:

我无法在按钮单击时添加新的文本字段

这是我累了的代码,

home.ts

constructor() {
  this.myForm = this._fb.group({
    md: false,
    mdNames: this._fb.group({
      uid: "",
      _rev: "",
      type: "i_org_docs_ref",
      name: "MARINE1",
      details: "Material declaration",
      details_array: this._fb.array([]),
      cdt: ""
    }),
  });

}


addClicked() {

  const control2 = <
    FormArray( < FormGroup > this.myForm.controls['mdNames']).controls['details_array']

  control2.push(this._fb.group({
    mdTextBox: "",
  }));
}

home.html

<div formControlName="mdNames">
  <div formArrayName="details_array">
    <ion-list *ngFor="let obj of myForm.controls.details_array.controls; let i=index">
      <div [formGroupName]="i">
        <ion-item no-lines>
          <button 
            ion-button 
            color="dark" 
            clear 
            icon-only 
            item-end 
            class="deleteBtn"
            (click)="deleteOrgItemClicked(i)">
                    <ion-icon name="ios-trash"></ion-icon>
                </button>
          <ion-input 
            formControlName="mdTextBox" 
            type="text" 
            class="textFields" 
            placeholder="Type details">
          </ion-input>
        </ion-item>
      </div>
    </ion-list>
    <ion-item>
      <button 
        (click)="addClicked()" 
        class="addBtn">
            Add documents
        </button>
    </ion-item>
  </div>
</div>

我想显示 details_array 的值,但它显示此错误: No value accessor for form control with name: 'mdNames'

请帮忙看看我哪里出错了?

【问题讨论】:

  • 请参考这个例子 -Inline Link
  • 示例显示了表单组内的表单数组。我的问题更像是formgroup的formgroup中的formarray

标签: angular ionic-framework ionic3 angular2-template formarray


【解决方案1】:

DEMO

HTML:

<ion-header>
    <ion-navbar>
        <ion-title>Home</ion-title>
    </ion-navbar>
</ion-header>

<ion-content padding>
    <form [formGroup]="myForm">
        <div formGroupName="mdNames">
            <div formArrayName="details_array">
                <ion-list *ngFor="let obj of myForm.controls.mdNames.controls.details_array.controls; let i=index;">
                    <div [formGroupName]="i">
                        <ion-item no-lines>
                            <button ion-button color="dark" clear icon-only item-end class="deleteBtn" (click)="deleteOrgItemClicked(i)">
                                                <ion-icon name="ios-trash"></ion-icon>
                                            </button>

                            <ion-input formControlName="mdTextBox" type="text" class="textFields" placeholder="Type details"></ion-input>

                        </ion-item>
                    </div>
                </ion-list> 
            </div>
        </div>
        <ion-item>
            <button (click)="addClicked()" class="addBtn">
                Add documents
            </button>
        </ion-item>

    </form>
</ion-content>

TS:

details_array: FormArray;

  myForm: FormGroup;

  constructor(public navCtrl: NavController, private _fb: FormBuilder) {
    this.myForm = this._fb.group({
      md: false,
      mdNames: this._fb.group(
        {
          uid: "",
          _rev: "",
          type: "i_org_docs_ref",
          name: "MARINE1",
          details: "Material declaration",
          details_array: this._fb.array([this.createArray()]),
          cdt: ""
        }
      ),
    });

  }
  createArray(): FormGroup {
    return this._fb.group({
      name: 'myName',
      data: 'myData',
      mdTextBox: 'mdTextBox'
    })
  }

【讨论】:

  • 感谢您的代码,但控制在模板 i.3 的第一行中断:&lt;div formControlName="mdNames"&gt;
  • 检查编辑的代码。
  • 我在表单数组中只取了一个表单组
猜你喜欢
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2017-03-22
  • 2021-12-29
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多