从 Angular 的下拉列表中删除选定的选项

Posted

技术标签:

【中文标题】从 Angular 的下拉列表中删除选定的选项【英文标题】:Remove selected option from drop down in Angular 【发布时间】:2020-11-13 09:06:53 【问题描述】:

我有一个按钮,单击时会添加更多选择下拉菜单。所以我想删除这些选择框中已经选择的选项以防止重复。

以下代码用于下拉选择:

<select class="select form-control"
   formControlName="environment_id" (change)="onEnvChange($event.target.value)">
   <option selected="selected" disabled value="">Select Environment
   </option>
   <ng-container  *ngFor="let environment of environments">
      <option *ngIf="!selectedEnvironments.includes(environment.environment_id)"
      [value]="environment.environment_id">
      environment.environment_id</option>
   </ng-container>
</select>

在组件中,我为change 提供了以下功能

 public onEnvChange(selectedEnvironment)
 
     this.selectedEnvironments.push(selectedEnvironment);
 

现在,当我选择一个选项时,该选项本身会从下拉列表中删除。例如,如果我有 option1,option2,option3 等选项,当我选择 option1 时,option1 将从下拉列表中删除。如何解决此问题并仅删除下一个选择下拉菜单的选项?

【问题讨论】:

***.com/questions/56887985/… 【参考方案1】:

您可以尝试创建两个环境对象并使用 formControl 中的 valueChanges 监听选择。获得选定的 environmentid 并过滤没有此 id 的其他对象后

例子

  ngOnInit()
    this.createForm();
    this.getEnvironments();
    this.environmentChanges()
  

  createForm()
      this.form = this.fb.group(
           'environment_id_1': [''],
           'environment_id_2' : ['']
)

  getEnvironments()
      const environments = [
        'environment_id': 1, 'environment': 'A'  ,
        'environment_id': 2, 'environment': 'B'  ,
        'environment_id': 3, 'environment': 'C'  ,
        'environment_id': 4, 'environment': 'D'  ];
      this.environments1 = environments;
      this.environments2 = environments;

  environmentChanges()
     this.form.controls['environment_id_1'].valueChanges
             .subscribe((environment_id)=>
             this.environments2 = this.environments1.filter((env)=> env.environment_id != environment_id)
)

<form [formGroup]="form">
<div class="row">
    <select class="select form-control"   formControlName="environment_id_1">   
        <option value="">Select Environment 1 </option> 
        <option *ngFor="let environment of environments1"  [value]="environment.environment_id"> environment.environment </option> 
    </select>
</div>
<div class="row" style="padding-top: 10px;">
    <select class="select form-control"   formControlName="environment_id_2">   
        <option value="">Select Environment 2 </option> 
        <option *ngFor="let environment of environments2"  [value]="environment.environment_id"> environment.environment </option> 
    </select>
</div>

enter image description here

【讨论】:

以上是关于从 Angular 的下拉列表中删除选定的选项的主要内容,如果未能解决你的问题,请参考以下文章

如何从表格的下拉菜单中删除先前选择的选项?

如何在Angular 7中单击按钮时获取下拉列表的选定选项[重复]

如何使用 Angular JS 设置下拉列表控件的选定选项

我应该如何从 Angular-2 的下拉列表中使用多选选项绑定数组

在与下拉列表分开的输入中显示 select2“药盒”

如何从下拉列表中继续显示选定的选项?