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

如何让Angular @ng-select组件无论是否选中选项都显示自定义模板

原因说明

@ng-select 内置的 ng-multi-label-tmp 模板设计上仅在存在选中项时触发渲染,无选中项时组件会默认渲染占位符区域,所以你写在该模板内的静态内容在空选状态下自然不会显示。

解决方案

你需要同时定义两个自定义模板:原有ng-multi-label-tmp负责有选中项的场景,新增ng-placeholder模板负责空选场景,相同的静态内容可以抽成公共模板复用,避免代码冗余。修改后的代码如下:

<!-- 抽离公共的静态内容模板,避免两处重复写 -->
<ng-template #commonLabelPrefix>
  <div class="ng-value">
    <span class="ng-value-label">                                                        
      <!-- 你原来放在这里的图标、标签等静态内容 -->                                                                                    
    </span>                                               
  </div>
</ng-template>

<ng-select
  [items]="users$ | async"
  [multiple]="true"
  bindLabel="name"
  bindValue="email"
  [(ngModel)]="selectedUsers">
  <!-- 空选状态下的自定义占位符模板 -->
  <ng-template ng-placeholder>
    <ng-container *ngTemplateOutlet="commonLabelPrefix"></ng-container>
  </ng-template>
  <!-- 有选中项时的模板 -->
  <ng-template ng-multi-label-tmp let-items="items">
    <ng-container *ngTemplateOutlet="commonLabelPrefix"></ng-container>
    <div class="ng-value" *ngFor="let item of items">
      <span class="ng-value-label"> {{item.name}}</span>
      <span class="ng-value-icon right" (click)="clear(item)">×</span>
    </div>
  </ng-template>
</ng-select>

如果不需要复用,也可以直接在两个模板里分别写对应的静态内容,调整后两种场景下都能正常显示你要的自定义内容。

内容的提问来源于stack exchange,提问作者Athreya M R Bhatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 01:18:03