Можно ли передать функцию фильтрации в Angular Nativescript RadListView, который может обращаться к локальной переменной searchTerm?Я пробовал на примере, расположенном при условии здесь , однако этот пример предлагает статический поисковый термин.
То, что я хочу сделать, отличается от функции фильтра семплов;*
Пример
this.myFilteringFunc = (item: DataItem) => {
return item && item.name.includes("Special Item");
};
Я изменяю поисковый термин "Special Item"
в текстовое поле, введенное пользователем.Я пробовал:
TypeScript
// on inital load....
this.resultsFound = this._dataItems
&& this._dataItems.length > 0
&& this._dataItems.filter(c => (c.Firstname && c.FirstName.includes(this.searchTerm))
|| (c.LastName && c.LastName.includes(this.searchTerm))
).length > 0;
if (this.searchTerm.length > 0) {
if(this.resultsFound) listView.filteringFunction = this.filterByName.bind(this);
}
else {
listView.filteringFunction = undefined;
}
//...later, I define the filtering function like so;
filterByName(item: NameListViewModel) {
if (!this.searchTerm){
return true;
}
return item
&& ((item.FirstName && item.FirstName.includes(this.searchTerm))
|| (item.LastName && item.LastName.includes(this.searchTerm)));
};
Просмотр
<RadListView #myListView row="0" *ngIf="resultsFound" [items]="dataItems" [groupingFunction]="groupByAge" (itemLoading)="onItemLoading($event)">
<ng-template tkListItemTemplate let-item="item" let-i="index">
<StackLayout class="person-card">
<app-person-register-list-item [item]="item"></app-person-register-list-item>
</StackLayout>
</ng-template>
<ng-template tkGroupTemplate let-category="category">
<StackLayout orientation="horizontal" [ngClass]="{'neutral-background':getCount(category)==''}" [ngClass]="{'grouping-header':getCount(category)!=''}" ios:height="50">
<Label class="person-group-header" text="{{formatCategory(category)}}"></Label>
<Label class="person-number" text="{{getCount(category)}}" verticalAlignment="center"></Label>
</StackLayout>
</ng-template>
</RadListView>