NG-ZORRO select选择器默认的不显示怎么办?

<nz-select
            [nzMode]="multiple"
            [nzShowSearch]="true"
            [nzAllowClear]="true"
            [attr.id]="id"
            (ngModelChange)="selectedValueChange($event)"
            [nzFilterOption]="defaultOptionFilter"
            [ngModel]="selectedValue">
                <nz-option *ngFor="let o of userList" [nzValue]="o" [nzLabel]="o.name"></nz-option>
        </nz-select>


 selectedValue = [{ item_id: 128, code: "94500000008", name: "测试", until: "次", rn: 47 }];

image.png

设置了一个默认值,但是在不会显示出来。这是什么问题,怎么解决呢?

阅读 2.9k
3 个回答

ng 不熟,但是我只说一点,*ngFor="let o of userList" [nzValue]="o" 看上去 o 是一个对象。

一般来说Value选中应该是个字符串或者数值。这样再判断是否选中的时候比较好判断,对象的话比较判断的是引用,可以看如下例子

image.png

API 中有个 compareWith 参数专门用于对象值的回显
https://ng.ant.design/compone...

compareWith(a:any, b:any) {
  return a.item_id === b.item_id;
}
<nz-select  ...
            [compareWith]="compareWith">
  <nz-option *ngFor="let o of userList" [nzValue]="o" [nzLabel]="o.name"></nz-option>
</nz-select>

默认选不中的原因是由于userList的那项与你提供的selectedValue是两个对象(虽然属性相同,但仍然是两个对象).

解决方法是增加一个比较方法,让nz知道怎么去确认两个对象是否是我们认为的同一个

compareWith(user1: any, user2: any): boolean {
    return user1.item_id === user2.item_id; // 如果是别的字段,请自行修改
}
<nz-select
    [compareWith]="compareWith"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题