Здесь вы всегда можете использовать другой шаблон доступа к элементам.
Сохранение d[keyToFilterOn]
со значением keyToFilterOn
в качестве 'роли' аналогично d.role
.
Так почему бы не сделать что-то вроде этого:
let keyToFilterOn = 'role'; // or id
const temp = this.temp.filter(d => {
return d[keyToFilterOn].toLowerCase().indexOf(val) !== -1 || !val;
});
Таким образом, вам не нужно будет создавать для него функцию.
Альтернативный
Вы можете создать AngularPipe и затем использовать его в своем классе TypeScript:
Вот filter
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(temp: any[], filterBy: string, filterValue: any): any {
if (!filterBy || !filterValue) {
return input;
}
return temp.filter(d => {
return d[filterBy].toLowerCase().indexOf(filterValue) !== -1 || !filterValue;
});
}
}
Вот как это использовать:
import { FilterPipe } from 'path/to/the/pipe';
class YourComponent {
YourFunction(value) {
let filteredData = new FilterPipe().transform(this.temp, keyToFilterOn, val);
}
}
Хотя Angular на самом деле не рекомендует использовать Pipe
для фильтрации данных. Но поскольку это используется внутри класса, а не в шаблоне, это нормально.