Is it possible to programmatically clear the selection of an ng-select dropdown? I'm wanting the equivalent behaviour of clicking the clear icon, but triggered programmatically.
I was expecting a clear()
method or something similar, but the documented API doesn't have anything along those lines.
This is my dropdown code:
<ng-select class="ng-select-wrap"
[searchFn]="multiTermSearch"
[items]="calculationOptions"
placeholder="Please select..."
name="calculation"
#calculationValue="ngModel"
[(ngModel)]="selectedCalculation">
</ng-select>
Here is solution from comment:
// Access ng-select
@ViewChild(NgSelectComponent) ngSelectComponent: NgSelectComponent;
// Call to clear
this.ngSelectComponent.handleClearClick();
Note that handleClearClick
isn't exposed in docs as public api method however as Tim mentioned it's public method so it's possible to call it.
I was looking for the same but for templates to invoke it outside ng-select
. So, the below worked fine for me following the accepted answer. ^_^
<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.
Clearing the selection can be achieved by simply setting the ngModel value to null. In the case of the above example:
this.selectedCalculation = null;
This isn't exactly the same as clicking the clear icon, as it doesn't trigger the (clear)
output event, but it was sufficient for my needs.
Like @tim answer is correct but I will prefer you set as an empty array instead of null just to save any loop break.
this.selectedCalculation = [];
Agree with @tim and @AlexOnozor,
I have successfully used 'selectedCalculation' as 'string', 'string[]', 'object[]' with Reactive Forms ( and as 'string' with ngModel ) and your suggested method worked smoothly.
I also tried using 'handleClearClick' but failed. Will update if i find my way through it.
So, this.selectedCalculation = '' or this.selectedCalculation= [] (for multipleSelect = true) should work.
Assuming the originally posted code sample below.
<ng-select class="ng-select-wrap"
[searchFn]="multiTermSearch"
[items]="calculationOptions"
placeholder="Please select..."
name="calculation"
#calculationValue="ngModel"
[(ngModel)]="selectedCalculation">
</ng-select>
The selectedCalculation
variable is created as an array and not a string, as the ng-select can allow for multiple values to be selected if [multiple]="true"
is set.
To clear the selected value(s) in the array programmatically, use:
this.selectedCalculation = [];
Should you need to clear the bound items, use:
this.calculationOptions = [];
Both of the above can be done by adding the (change) handler in HTML.
(change)="change($event)
Something like this in your TypeScript.
change(event: any): void {
this.calculationOptions = [];
this.selectedCalculation = [];
}
Even thought @Buczkowski answer clears ng-select
, it also does a focus on input, which isn't needed for all cases. So i used other method: clearModel
// Access ng-select
@ViewChild(NgSelectComponent) ngSelectComponent: NgSelectComponent;
// Call to clear
this.ngSelectComponent.clearModel();
So if you need to just clear input, use clearModel
method. Else if focus and clear is needed, use handleClearClick
.