You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复mat-select结合cdkVirtualScroll的选中项与溢出截断问题

解决mat-select结合cdkVirtualScroll的两个问题

首先先修正代码中的拼写错误:*ckdVirtualFor应为*cdkVirtualFor,这是基础语法问题。


问题1:下拉框关闭时选中项不可见

原因

mat-select默认依赖已渲染的mat-option节点获取选中值的显示内容,但虚拟滚动仅渲染视口范围内的选项(你的代码中是前5个),当选中项不在此范围内时,对应的mat-option未被创建,导致无法显示选中值。

解决方法

使用displayWith函数自定义选中值的显示逻辑,脱离对mat-option DOM节点的依赖:

  1. 在组件类中定义显示函数:
displayOption(option: any): string {
  return option ? option.value : '';
}
  1. 在模板中为mat-select绑定该函数:
<mat-select formControlName="name" [displayWith]="displayOption">
  <cdk-virtual-scroll-viewport itemSize="42" [style.height.px]="5*42">
    <mat-option *cdkVirtualFor="let option of ($options | async)" [value]="option">
      {{option.value}}
    </mat-option>
  </cdk-virtual-scroll-viewport>
</mat-select>

问题2:文本溢出截断功能未生效

原因

默认的mat-option样式未开启文本截断规则,且虚拟滚动视口的宽度约束可能未传递到选项节点。

解决方法

添加CSS样式强制开启文本截断:

mat-option {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

cdk-virtual-scroll-viewport {
  width: 100%;
}

内容的提问来源于stack exchange,提问作者Robin Dijkhof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:05:20