Angular+NG-ZORRO From表单 数组表单

1、form表单中包含普通参数,也包含数组参数

// form 表单配置
 this.validateForm = this.fb.group({
      name: [null, [Validators.required]], // 名称
      id: [null], // 
      address: [null, [Validators.required]], // 地址
      linkmanName: [null, [Validators.required]], // 姓名
      linkmanTel: [ null,[Validators.required]], // 电话
      accountInfo: new FormArray([]), // 数组
 });

 this.addAccountInfo(); // 初始化数组


addAccountInfo() {

    const myContact: FormGroup = new FormGroup({
        account: new FormControl({value: null, disabled: false},[Validators.required]),
        address: new FormControl({value: null, disabled: false},[Validators.required])
    })
    // 添加数组元素
    this.accountInfo.push(myContact);
}

get accountInfo() {
  return this.validateForm.get('accountInfo') as FormArray;
}

  // 删除信息
  removeContact(i: number) {
    this.accountInfo.removeAt(i);
  }


// 编辑时数组数据回显
result.accountInfo.forEach((item: any) =>{
    this.addContact();
})
this.validateForm.setValue(result);
this.changeDetectorRef.detectChanges();
// tslint:disable-next-line:forin
for (const i in this.validateForm.controls) {
   this.validateForm.controls[i].markAsDirty();
   this.validateForm.controls[i].updateValueAndValidity();
}

2、html绘制表单数组

<div formArrayName="accountInfo">
          <div  class="form-array-box" *ngFor="let contact of accountInfo.controls; let i = index"
          [formGroupName]="i">
            <div class="form-array-info">
              <nz-form-item class="marbt_10 padd_10">
                <nz-form-label [nzSpan]="6" [nzRequired]="nzRequired" nzFor="account">帐号</nz-form-label>
                <nz-form-control [nzSpan]="16" nzHasFeedback nzErrorTip="帐号不能为空" *ngIf="type !== 'info'">
                  <input
                    type="text"
                    class="form-control"
                    nz-input
                    placeholder="请输入账号"
                    formControlName="account"
                    maxlength="25"
                  />
                  <nz-form-explain
                    *ngIf="contact.get('account')?.dirty && contact.get('account')?.errors"
                  >
                    请输入正确的账号!
                  </nz-form-explain>
                </nz-form-control>
                <nz-form-control [nzSpan]="16" nzHasFeedback *ngIf="type === 'info'">
                  <span class="info-text">{{ validateForm.value.accountInfo[i].account }}</span>
                </nz-form-control>
              </nz-form-item>
              <nz-form-item class="marbt_20">
                <nz-form-label [nzSpan]="6" [nzRequired]="nzRequired" nzFor="bank">地址</nz-form-label>
                <nz-form-control [nzSpan]="16" nzHasFeedback nzErrorTip="地址不能为空" *ngIf="type !== 'info'">
                  <input
                    type="text"
                    class="form-control"
                    nz-input
                    placeholder="请输入地址"
                    formControlName="address"
                    maxlength="20"
                  />
                  <nz-form-explain *ngIf="contact.get('address')?.dirty && contact.get('address')?.errors">
                    请输入正确的地址!
                  </nz-form-explain>
                </nz-form-control>
                <nz-form-control [nzSpan]="16" nzHasFeedback *ngIf="type === 'info'">
                  <span class="info-text">{{  validateForm.value.accountInfo[i].address }}</span>
                </nz-form-control>
              </nz-form-item>
            </div>
            <div class="delete-icon" *ngIf="type !== 'info' && accountInfo.length !== 1" (click)="removeContact(i)">
              <i nz-icon nzType="minus-circle" nzTheme="outline"></i>
            </div>
          </div>
          <div style="width: 100%;" *ngIf="type !== 'info' && accountInfo.length < 3">
            <button type="button" class="add-contact-btn btn" (click)="addContact()">
              <i nz-icon nzType="plus-circle" nzTheme="outline"></i>
              添加账户
            </button>
          </div>
        </div>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值