在Angular中使用NG-ZORRO的选择框不能自定义输入选项

项目场景:

已有下拉选择框,根据后端接口返回的数据遍历生成option,但数据库中不能覆盖所有用户需要的选项,所以需要实现既能选择,又能手动输入的功能


问题描述

首先我在官方文档发现一个可添加选项的样例,如图,用户可以在下方手动添加需要的选项,然后选择。但是由于我们的数据是后端返回的静态数据,在数据回显时会出现问题。


原因分析:

数据回显时,由于选择框的数据是静态的,在选项数组中找不到用户添加的选项,所以自定义选项无法正常回显出来。


解决方案:

在选择框前方添加一个button,点击后用户可切换输入方式,如果用户需要的数据在选项中存在可直接选择,若不存在,可切换为输入框,手动输入。

HTML

<div style="display: flex">
            <button nz-button [disabled]="isDisabled" (click)="toggleEdit()">
              {{ isEditing ? '切换选择' : '切换自定义' }}
            </button>
            <div *ngIf="isEditing">
              <input class="selectinput" nz-input placeholder="请输入区/县名" [(ngModel)]="formData.vCountyName"
                [disabled]="isDisabled" />
            </div>
            <div *ngIf="!isEditing">
              <nz-select nzShowSearch nzPlaceHolder="请选择区/县名" [(ngModel)]="formData.vCountyName"
                (ngModelChange)="onCountyChange($event)" [nzDisabled]="isDisabled">
                <nz-option *ngFor="let county of countyOfOption" [nzLabel]="county.areaName"
                  [nzValue]="county.areaName">
                </nz-option>
              </nz-select>
            </div>
          </div>

TS

@Input() countyOfOption: CountyInfo[] = [];
public isEditing = false; // 控制选择框和输入框的显示状态  
public _propData: any = {};

 ngOnInit(): void {
    this.isEditing = false;
    const IS_EMPTY_OBJ = (obj: any) => obj && typeof obj === 'object' && Object.keys(obj).length > 0;
    // 检查 this._propData 是否是一个非空对象
// 初始化时在选项数组中查找是否存在该选项,如果不存在,则标志为true显示输入框
    if (this.countyOfOption.length > 0 && IS_EMPTY_OBJ(this._propData)) {
      const RES = this.countyOfOption.find(item => item.areaName === this._propData.vCountyName);
      if (!RES) {
        this.isEditing = true;
      }
    }
  }

toggleEdit(): void {
    this.isEditing = !this.isEditing; // 切换编辑状态
  }

实现效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值