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

Posted

技术标签:

【中文标题】从角度的下拉列表中删除选定的选项【英文标题】:remove selected option from drop down list in angular 【发布时间】:2021-04-16 03:19:23 【问题描述】:

我有一个页面,其中包含项目的下拉列表。该列表是对象数组。我想从之前选择的列表中删除该对象。 component.html

    <select (change)="onChange($event.target.value)" type="number"                      
    class="form-control" formControlName="Id" >
       <option hidden value="" >Please Select Item</option>
       <option *ngFor="let name of getItems"  type="number" [ngValue]="name.Id">
           name.ItemName 
       </option>
    </select>

我的 component.ts 文件

   ngOnInit()
       this.service
      .getItemListByRule(this.Id)
      .subscribe((res: any) => 
      this.getItems = res.payload;
    );
   
  onChange(value)     
     this.getItems.splice(this.getItems.findIndex(item => item.Id === value), 1);
     console.log(this.getItem)
  

我正在使用拼接方法从数组列表中删除选定的项目。但它没有按预期工作。

【问题讨论】:

您能否在任何平台(如(jsfiddle 或 codepen 等))上分享您的代码,以便查看和调试? 我不会使用拼接。使用过滤器删除选定的项目并返回列表的其余部分。 【参考方案1】:

如果你不想显示但可以选择你需要隐藏属性,有些喜欢

    <form [formGroup]="form">
        <select type="number"
        class="form-control" formControlName="Id" >
           <option hidden value="null" >Please Select Item</option>
           <option *ngFor="let name of items" 
               <!--just simple hidden if is the value select
                   be carefull!, is not equal use "null" to not add the attrib hidden-->
               [hidden]="form.get('Id').value==name.Id?true:null" 
               type="number" [ngValue]="name.Id">
               name.ItemName 
             </option>
          </select>
    </form>

见the stackblitz

更新如果我们有一个 FormArray

formArray 可以是 FormControls 的 FormArray

  form = new FormGroup(
    array: new FormArray([new FormControl(null), new FormControl(null)])
  );

或 FormGroups 的 FormArray

  form = new FormGroup(
    array: new FormArray([
      new FormGroup(
          id:new FormControl()
         ), 
      new FormGroup(
          id:new FormControl()
         ), 
    ])
  );

在任何情况下你都需要,像往常一样管理一个formArray一个getter

  get array() 
    return this.form.get("array") as FormArray;
  

如果是 FormControls 的 FormArray,则使用 [hidden]="array.at(i).value==name.Id?true:null"

<form [formGroup]="form">
    <div formArrayName="array">
        <div *ngFor="let control of array.controls;let i=index">
            <select type="number"
    class="form-control" [formControlName]="i" >
       <option hidden value="null" >Please Select Item</option>
       <option *ngFor="let name of items" 
            [hidden]="array.at(i).value==name.Id?true:null"
            type="number" [ngValue]="name.Id">
           name.ItemName 
         </option>
      </select>
        </div>
    </div>
</form>

如果您使用 FormGroup 的 FormArray,请使用 [hidden]="array.at(i).value.Id==name.Id?true:null"

<form [formGroup]="form">
    <div formArrayName="array">
        <div *ngFor="let control of array.controls;let i=index" [formGroupName]="i">
            <select type="number"
    class="form-control" formControlName="Id" >
       <option hidden value="null" >Please Select Item</option>
       <option *ngFor="let name of items" 
             [hidden]="array.at(i).value.Id==name.Id?true:null" 
             type="number" [ngValue]="name.Id">
           name.ItemName 
         </option>
      </select>
        </div>
    </div>
</form>

注意:stackblitz 更新了三种情况

【讨论】:

@neelam,我只是更新了答案和堆栈闪电战(它只考虑如何“询问”控件。如果是 FormControls 的 formArray array.at(i).value if 是 FormGroups 的 formArray array.at(i).value.Id 如果我们有如下stackblitz链接中的表单数组怎么办。 stackblitz.com/edit/… @neelam 我遇到了与表单数组类似的问题。 Array.filter 不适合,因为它修改了实际的数组。如果你修好了,请帮忙【参考方案2】:

Demo首先你忘了把你的结果再次赋值给你的数组

将选项更改为

 <option *ngFor="let name of getItems"  type="number" value="name.Id">
     name.ItemName 
 </option>

并改变方法分配给你的数组

onChange(value)    
   this.getItems=this.getItems.filter(x=>x.Id!=value)


 

【讨论】:

它正在工作。但我无法在输入框中看到选定的选项。 @neelam,您需要标记为“隐藏”,而不是过滤项目列表

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

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

如何在单击角度7中的按钮时获取下拉列表的选定值和选定文本[重复]

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

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

从 sql server 获取选定的值到 php 中的下拉列表

如何从 Django 的下拉列表中从用户的选定选项中进行查询