简体   繁体   English

在angular6中创建动态形式

[英]create dynamic form in angular6

i need to create a dynamic form . 我需要创建一个动态表格。 when click AddNew it create a new form . 当单击AddNew它将创建一个新表单。

i using this code in ts file : 我在ts文件中使用此代码:

    addinfoForm:FormGroup;
  infoNameList:FormArray;
  infoModel:Productdetail;

  constructor(private fb:FormBuilder,private router:Router,private tokenService:TokenstoreService) { }

  ngOnInit() {
    this.InfoForm();
  }

  /**
   * AddInfoForm
   */
  public InfoForm() {
    this.addinfoForm=this.fb.group({
      infoName:this.fb.array([this.CreateInfoName()])
    })
    this.infoNameList=this.addinfoForm.get('infoNames') as FormArray;
  }

  public CreateInfoName():FormGroup{
    return this.fb.group({
      infoName:['',Validators.compose([Validators.required])]
    });
  }

  public AddInfoName(){
    this.infoNameList.push(this.CreateInfoName());
  }

  public RemoveInfoName(index:number){
    this.infoNameList.removeAt(index);
  }

and use this in html : 并在html中使用它:

        <div class="panel-content">
          <form class="form-line" [formGroup]="addinfoForm" (ngSubmit)="AddRole()">
                <div formArrayName="infoNameList">
                    <div class="description" *ngFor="let name of addinfoForm.controls; let NameIndex=index" [formGroupName]="NameIndex">
                    <div [formGroupName]="i" class="row">
                        <label class="form-line">  Name:   </label>
                        <input style="margin-right: 50px;" class="form-line" pInputText id="pFaName" formControlName="Name">
                        <app-filederrors [form]="addinfoForm" 
                            field="pFaName"
                            nicename="Name">
                        </app-filederrors>
                    </div>
                    </div>
            </div>
        </form>
        <button (click)="AddInfoName()">Add New </button>
              <div class="button">
                  <button pButton type="button" label="REgister" (click)="AddCat()" [disabled]="!addinfoForm.valid" class="ui-button-rounded"></button>
                  <button pButton type="button" label="Cencel" class="ui-button-rounded ui-button-danger"></button>
              </div>
    </div>

but when i click it how me this Error : 但是当我单击它时我如何出现此错误:

AddinfoComponent.html:21 ERROR TypeError: Cannot read property 'push' of null at AddinfoComponent.push../src/app/admin/admin/dashboard/productinfo/addinfo/addinfo.component.ts.AddinfoComponent.AddInfoName (addinfo.component.ts:41) AddinfoComponent.html:21错误TypeError:无法读取AddinfoComponent.push ../ src / app / admin / admin / dashboard / productinfo / addinfo / addinfo.component.ts.AddinfoComponent.AddInfoName(addinfo.component .TS:41)

How Can i solve this problem ? 我怎么解决这个问题 ?

The problem is that your infoNameList property has been declared, but not initialised so it's null. 问题在于您的infoNameList属性已经声明,但尚未初始化,因此为null。

Just do the following: 只需执行以下操作:

ngOnInit() {
    this.inforNameList = this.fb.array([])
    this.InfoForm();
  }

Maybe get('infoName') instead of get('infoNames') ? 也许用get('infoName')而不是get('infoNames')

  public InfoForm() {
    this.addinfoForm=this.fb.group({
      infoName:this.fb.array([this.CreateInfoName()])
    })
    this.infoNameList=this.addinfoForm.get('infoName') as FormArray;
  }

wrong name should be infoName 错误的名称应为infoName

public InfoForm() {
    this.addinfoForm=this.fb.group({
      infoName:this.fb.array([this.CreateInfoName()])
    })
    this.infoNameList=this.addinfoForm.get('infoName') as FormArray; // <- previously infoNames
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM