I have a dropdown list with a filter for IN
and OUT
values. Here everything works.
<select style="max-width: 100px" [ngModel]="selectedBrand" (ngModelChange)="onChangeType($event)">
<option [value]="'IN'">IN</option>
<option [value]="'OUT'">OUT</option>
</select>
TS
public selectedBrand: any;
public onChangeType(type: any) {
this.selectedBrand = type;
console.log(this.selectedBrand);
this.filteredCustomer = this.customerTransferts.filter(
(item) => item.type === this.selectedBrand
);
console.log(this.filteredCustomer);
}
I would now like to add a SELECT ALL
to retrieve the elements of IN
or OUT
.
What am I missing in my code, please?
Thanks for your help.
CodePudding user response:
You can either have a function to remove the filter like so:
resetFilter() {
this.selectedBrand = '';
this.filteredCustomer = this.customerTransferts
}
You could call this with a button click or whatever you like.
Or you can put another option in your dropdown, and check for it in the onChangeType
method.
<select style="max-width: 100px" [ngModel]="selectedBrand" (ngModelChange)="onChangeType($event)">
<option [value]="'ALL'">ALL</option>
<option [value]="'IN'">IN</option>
<option [value]="'OUT'">OUT</option>
</select>
public onChangeType(type: any) {
if (type === 'ALL') {
this.filteredCustomer = this.customerTransferts;
return;
}
this.selectedBrand = type;
console.log(this.selectedBrand);
this.filteredCustomer = this.customerTransferts.filter(
(item) => item.type === this.selectedBrand
);
console.log(this.filteredCustomer);
}
Also you should change your ngModel
to two way binding [(ngModel)]
<select style="max-width: 100px" [(ngModel)]="selectedBrand" (ngModelChange)="onChangeType($event)">
Then it will automatically be synced with the selectedBrand
property - both ways.
So you can remove this.selectedBrand = type
from onChangeType()
.
public onChangeType(type: any) {
if (type === 'ALL') {
this.filteredCustomer = this.customerTransferts;
return;
}
this.filteredCustomer = this.customerTransferts.filter(
(item) => item.type === type
);
}