Reputation: 5356
Sample data I receive from my server:
tasks= [
{
"id":8,
"title":"Eight",
"how_often":"DS",
"how_important_task":"",
"how_important_improvement":"",
"stakeholder":2,
"project":2
},
{
"id":9,
"title":"Nine",
"how_often":"",
"how_important_task":"",
"how_important_improvement":"",
"stakeholder":2,
"project":2
},
{
"id":21,
"title":"Seventeen",
"how_often":"",
"how_important_task":"",
"how_important_improvement":"",
"stakeholder":2,
"project":2
}
]
Template where I am showing these tasks along with filters I want to apply on them:
<ion-split-pane>
<ion-grid>
<ion-row padding>
<h5>Filter tasks according to</h5>
</ion-row>
<ion-row padding>
<ion-col>
<ion-list>
<ion-item>
<ion-label>Frequence of performance</ion-label>
<ion-select>
<ion-option *ngFor="let frequency of filer_per_frequency" value="{{frequency.value}}">{{frequency.title}}</ion-option>
</ion-select>
</ion-item>
</ion-list>
</ion-col>
<ion-col>
<ion-list>
<ion-item>
<ion-label>Importance</ion-label>
<ion-select [(ngModel)]="importance">
<ion-option *ngFor="let importance of filer_per_importance" value="{{importance.value}}">{{importance.title}}</ion-option>
</ion-select>
</ion-item>
</ion-list>
</ion-col>
<ion-col>
<ion-list>
<ion-item>
<ion-label>Importance of improvement</ion-label>
<ion-select>
<ion-option *ngFor="let improvement of filer_per_improvement" value="{{improvement.value}}">{{improvement.title}}</ion-option>
</ion-select>
</ion-item>
</ion-list>
</ion-col>
<ion-col>
<ion-list>
<ion-item>
<ion-label>Stakeholder</ion-label>
<ion-select>
<ion-option *ngFor="let stakeholder of filer_per_stakeholder" value="{{stakeholder.value}}">{{stakeholder.title}}</ion-option>
</ion-select>
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<ion-item-divider color="light"></ion-item-divider>
<ion-list>
<button detail-none (click)="expandItem(task)" ion-item *ngFor="let task of tasks">
<h2>{{task.title}}</h2>
<expandable [expandHeight]="itemExpandHeight" [expanded]="task.expanded">
<hr><p>{{task.how_often | fullform}}</p>
<p>{{task.how_important_task | fullform}}</p>
<p>{{task.why_perform_task}}</p>
<p>{{task.sequence_of_actions}}</p>
</expandable>
</button>
</ion-list>
</ion-grid>
</ion-split-pane>
I should be able to apply multiple filters from the available ones at the same time.
How can I handle that in my component, as pipes will reduce the performance?
Upvotes: 0
Views: 163
Reputation: 18281
It is actually suggested by the Angular devs not to use a pipe for this. You can read more about that on their site (https://angular.io/guide/pipes#no-filter-pipe)
Instead, you should do so in the component when you load your data.
As a very rough example
// Assumes you load your data in ngOnInit from some service
ngOnInit() {
this.myService.loadData().subscribe(data => {
// Filters out all null items
this.filtered = data.filter((item) => item != null);
})
}
Upvotes: 1