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

如何在Angular mat-select选项中添加可编辑的Input输入框

Angular mat-select选项内输入框无法编辑的解决方法

问题说明

使用Angular的mat-select组件实现多选技术选择下拉列表,为每个mat-option添加版本输入框后,点击输入框会直接触发选项选中,无法激活输入框进行编辑。

下拉列表状态

  • 收起状态:显示提示文本“Choisissez les technologies parmi cette liste”的表单输入框,右侧带有下拉箭头
  • 展开状态:下拉列表中每个技术选项后方都带有一个占位符为“Version”的输入框
  • 触发问题的操作:点击选项后方的输入框区域时,会直接选中对应选项,无法进入输入框编辑状态

当前代码

<mat-form-field appearance="fill">
   <mat-label>Choisissez les technologies parmi cette liste</mat-label>
   <mat-select formControlName="listeTechnologies" multiple> 
      <mat-option *ngFor="let item of listeDeroulanteTechnologies" [value]="item.code1">
         {{ item.valeur1}} 
         <input type="text" placeholder="Version"/>
      </mat-option>
   </mat-select> 
</mat-form-field>

解决思路

1. 阻止输入框点击事件冒泡

mat-option会监听内部所有点击事件来触发选中状态,因此需要阻止输入框的点击事件向上传递到mat-option:

<input type="text" placeholder="Version" (click)="$event.stopPropagation()"/>

添加(click)="$event.stopPropagation()"后,点击输入框时只会激活输入框,不会触发选项选中。

2. 绑定版本数据(可选)

如果需要保存每个技术的版本信息,建议给listeDeroulanteTechnologies中的每个项添加version属性,通过双向绑定关联输入框:

<input type="text" placeholder="Version" (click)="$event.stopPropagation()" [(ngModel)]="item.version"/>

注意需要在对应模块中导入FormsModule以使用ngModel。

3. 表单数据整合(可选)

若需要在提交表单时同时传递技术编码和版本信息,可以修改mat-option的value为包含编码和版本的对象:

<mat-option *ngFor="let item of listeDeroulanteTechnologies" [value]="{code: item.code1, version: item.version}">
   {{ item.valeur1}} 
   <input type="text" placeholder="Version" (click)="$event.stopPropagation()" [(ngModel)]="item.version"/>
</mat-option>

这样表单控件listeTechnologies的值会是包含技术编码和对应版本的对象数组,方便后续提交处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:27:35