You need to enable JavaScript to run this app. 如何在Angular中自定义支持多选的输入型chips组件
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular中自定义支持多选的输入型chips组件

实现多选Chips的修改方案

核心逻辑为新增数组存储已选选项,选中后不填充输入框而是将选项存入数组,清空输入框支持后续继续选择,同时在输入区域前置渲染已选的Chips标签。

1. TypeScript代码修改

新增属性存储已选Chips

在组件类的属性声明部分新增存储已选选项的数组:

// 原有属性保留,新增以下内容
selectedChips: any[] = [];

修改选中逻辑&新增删除方法

替换原有selectValue方法,新增删除Chips的方法:

selectValue(value) {
  // 可选:添加去重逻辑,避免重复选择同一项
  const existed = this.selectedChips.find(item => 
    item[this.propertyValueToShow] === value[this.propertyValueToShow]
  );
  if (!existed) {
    this.selectedChips.push(value);
  }
  // 清空输入框,支持继续搜索下一个选项
  this.stateForm.patchValue({ search: null });
  this.showDropDown = false;
}

// 新增删除指定Chips的方法
removeChip(index: number) {
  this.selectedChips.splice(index, 1);
}

2. 模板HTML代码修改

在表单内输入框前新增已选Chips的渲染区域:

<form [formGroup]='stateForm' autocomplete="new-password" novalidate autocomplete="off">
  <!-- 新增已选Chips渲染区域 -->
  <div class="chips-wrap">
    <span class="chip-tag" *ngFor="let chip of selectedChips; let idx = index">
      {{ chip[propertyValueToShow] }}
      <i class="fa fa-times" (click)="removeChip(idx)"></i>
    </span>
  </div>
  <input id='search' placeholder="Search for a state" formControlName='search' (click)=' openDropDown() '
    class='input-underline search-bar' type='text'>
</form>

3. 可选:补充基础样式(SCSS示例)

给Chips添加基础展示样式,可根据业务需求自定义:

.chips-wrap {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-bottom: 8px;
}
.chip-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 10px;
  background: #f0f0f0;
  border-radius: 20px;
  font-size: 14px;
}
.chip-tag .fa-times {
  cursor: pointer;
  font-size: 12px;
  color: #666;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:45:04