【问题标题】:While using formArray I am getting this error: "ModalDialogComponent.html:6 ERROR TypeError: Cannot read property 'controls' of null"使用 formArray 时出现此错误:“ModalDialogComponent.html:6 ERROR TypeError: Cannot read property 'controls' of null”
【发布时间】:2019-10-26 13:15:24
【问题描述】:

我想在 Angular 中使用反应形式添加动态元素。我正在关注此链接:https://alligator.io/angular/reactive-forms-formarray-dynamic-fields/

我所做的与该链接完全相同。但我收到错误。 下面是代码:

ts 文件:

orderForm: FormGroup;
items: FormArray;
constructor(private formBuilder: FormBuilder ) { }

ngOnInit() {
    this.orderForm = this.formBuilder.group({
      iems: this.formBuilder.array([ this.createItem() ])
    })
  }

createItem(): FormGroup {
    return this.formBuilder.group({
      checked: ''
    })
  }

addDynamicCheckBox() {
    this.items = this.orderForm.get('items') as FormArray;
    this.items.push(this.createItem());
  }

模板文件:

<div [formGroup]="orderForm">
        {{ orderForm.controls.items.controls }}
      <div class="row" formArrayName="items" *ngFor="let item of orderForm.get('items').controls; let i=index">
        <div class="col-10" [formGroupName]="i">
          <mat-checkbox formControlName="checked"></mat-checkbox>
        </div>
        <div class="col-2" style="float: right">
          <button mat-raised-button>Remove</button>
        </div>
      </div>
    </div>

编辑

我想设置 formArray 控件的值。我看不到任何价值。只是显示复选框。以下是我制作的代码:

ts 文件

setCheckBoxValue() {
    this.items = this.orderForm.get('items') as FormArray;
    this.data.data.forEach((element) => {
      this.items.push(this.formBuilder.group({
        checked: true,
        selected: element
      }))
    });
  }

html 文件

<div [formGroup]="orderForm">
      <div class="row" formArrayName="items" *ngFor="let item of orderForm.get('items').controls; let i=index">
        <div class="col-8" [formGroupName]="i">
          <mat-checkbox formControlName="checked">{{item.checked}}</mat-checkbox>
        </div>
      </div>

      check box value: {{ orderForm.get('items').controls.checked }}
    </div>
``

【问题讨论】:

    标签: angular angular6 angular-reactive-forms formarray


    【解决方案1】:

    您的代码 iems -> items 中似乎有错字。请查看更新的答案

    TS 文件

    import { Component } from '@angular/core';
    import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
    
    @Component({
      selector: 'my-app',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent {
      orderForm: FormGroup;
      items: FormArray;
      constructor(private formBuilder: FormBuilder) { }
    
      ngOnInit() {
        this.orderForm = this.formBuilder.group({
          items: this.formBuilder.array([this.createItem()])
        })
      }
    
      createItem(): FormGroup {
        return this.formBuilder.group({
          checked: true
        })
      }
    
      addDynamicCheckBox() {
        this.items = this.orderForm.get('items') as FormArray;
        this.items.push(this.createItem());
      }
    
      setCheckBoxValue() {
        this.items = this.orderForm.get('items') as FormArray;
        this.items.push(this.formBuilder.group({
          checked: true,
        }))
      }
    }
    

    模板

    <div [formGroup]="orderForm">
        <div class="row" formArrayName="items" *ngFor="let item of orderForm.get('items').controls; let i=index">
            <div class="col-8" [formGroupName]="i">
                <input type="checkbox" formControlName="checked" />
            I'm {{item.controls.checked.value === true ? "Checked" : "Unchecked"}}
          </div>
        </div>
        <button (click)="setCheckBoxValue()">Add</button>
      </div>
    

    【讨论】:

    • 你好@Sharan,我想设置表单数组元素的值。我编辑了我的问题。我只能看到复选框而不是它的值。你能检查我更新的代码吗?
    • angular-radfs1.stackblitz.io :检查这个堆栈闪电战。我会更新我的答案
    • 非常感谢.. @Sharan,我正在使用来自 ngFor 的 item .. 所以什么都没有显示出来.. 但我想问一下为什么我没有通过使用 item 获得任何价值?
    • 您也可以使用项目,我已经更新了答案。请注意。如果对您有帮助,请将答案标记为正确
    • 好的,它也在使用 item 显示值。但是通过不检查,它显示为假,再次检查它,它显示为真。这不应该发生,对吧?通过选中或取消选中复选框,不应更改值
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多