如何清除 ng-select selection

How to clear ng-select selection

是否可以通过编程方式清除 ng-select 下拉列表的 selection?我想要单击清除图标的等效行为,但以编程方式触发。

我期待 clear() 方法或类似的东西,但 documented API 没有任何类似的东西。

这是我的下拉代码:

<ng-select class="ng-select-wrap"
           [searchFn]="multiTermSearch"
           [items]="calculationOptions"
           placeholder="Please select..."
           name="calculation"
           #calculationValue="ngModel"
           [(ngModel)]="selectedCalculation">
</ng-select>

只需将 ngModel 值设置为 null 即可清除选择。在上面的例子中:

this.selectedCalculation = null;

这与单击清除图标不完全相同,因为它不会触发 (clear) 输出事件,但足以满足我的需要。

@tim 的回答是正确的,但我希望您将其设置为空数组而不是 null 只是为了保存任何循环中断。

this.selectedCalculation = [];

这是来自评论的解决方案:

  // Access ng-select
  @ViewChild(NgSelectComponent) ngSelectComponent: NgSelectComponent;

  // Call to clear
  this.ngSelectComponent.handleClearClick();

请注意,handleClearClick 未在文档中公开为 public api 方法,但正如 Tim 提到的那样,它是 public方法,因此可以调用它。

同意@tim 和@AlexOnozor, 我已经成功地将 'selectedCalculation' 用作 'string'、'string[]'、'object[]' 和 Reactive Forms(以及 'string' 和 ngModel )并且您建议的方法运行顺利。 我也尝试使用 'handleClearClick' 但失败了。如果我找到方法会更新。

因此,this.selectedCalculation = '' 或 this.selectedCalculation= [](对于 multipleSelect = true)应该有效。

假设下面是最初发布的代码示例。

<ng-select class="ng-select-wrap"
           [searchFn]="multiTermSearch"
           [items]="calculationOptions"
           placeholder="Please select..."
           name="calculation"
           #calculationValue="ngModel"
           [(ngModel)]="selectedCalculation">
</ng-select>

selectedCalculation 变量创建为数组而不是字符串,因为 ng-select 可以允许多个值被 selected if [multiple]="true"已设置。

要以编程方式清除数组中的 selected 值,请使用:

this.selectedCalculation = [];

如需清空绑定物品,使用:

this.calculationOptions = [];

以上两个都可以通过在 HTML.

中添加(更改)处理程序来完成
(change)="change($event)

你的 TypeScript 中有这样的东西。

change(event: any): void {
   this.calculationOptions = [];
   this.selectedCalculation = [];
  }

我一直在寻找相同的模板,但要在 ng-select 之外调用它。因此,按照接受的答案,以下内容对我来说效果很好。 ^_^

<ng-select class="ng-select-wrap"
           [searchFn]="multiTermSearch"
           [items]="calculationOptions"
           placeholder="Please select..."
           name="calculation"
           (clear)="resetCalculations();"
           [(ngModel)]="selectedCalculation" #selectDropdown>
</ng-select>

<input type="button" (click)="selectDropdown.handleClearClick()">

This also makes sure the resetCalculations() being called.

即使认为@Buczkowski 的回答很清楚 ng-select,它也确实关注输入,但并非所有情况都需要输入。所以我使用了其他方法:clearModel

  // Access ng-select
  @ViewChild(NgSelectComponent) ngSelectComponent: NgSelectComponent;

  // Call to clear
  this.ngSelectComponent.clearModel();

因此,如果您只需要清除输入,请使用 clearModel 方法。否则,如果需要聚焦和清除,请使用 handleClearClick.

最佳答案是清除特定操作的输入字段。我也根据自己的需要在我的项目中使用了这段代码。

在HTML中写下这段代码:

<ng-select [items]="products" #ngSelectComponent
           bindLabel="name"
           placeholder="Enter Product Name /SKU/ Scan Barcode"
           appendTo="body"
           name="selectedProduct"
           id="selectedProduct"
           (change)="productChange($event)"
           [multiple]="false"
           ([ngModel])="selectedProduct" >

<input type="button" (click)="clearValue()">

在 .TS 文件中为此控件添加一个 ViewChild,这样如果您的屏幕由多个 ngSelect 元素组成,那么您可以清除特定的 ngSelect 值。

@ViewChild('ngSelectComponent') ngSelectComponent: NgSelectComponent;

clearValue(){
  this.ngSelectComponent.clearModel(); 
  // This line will clear the value of ngSelect control. 
  // You can write code according to your requirement.
}

我遇到了同样的问题,意识到你唯一需要做的就是将你分配给 [items]calculationOptions 设置为一个空数组,即你的 .ts 中的 []文件。

现在,您似乎在要求某人将您的 calculationOptions 设置为 []。 clear() 功能不存在的原因是有道理的。