我编写了一个简单的 Angular 管道,它允许您将对象或回调函数作为过滤器传递。
请看下面的例子:
home.component.ts
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
})
export class HomeComponent {
array = [
{type: 'log', name: 'Log 1'},
{type: 'log', name: 'Log 2'},
{type: 'log', name: 'Log 3'},
{type: 'log', name: 'Log 4'},
{type: 'event', name: 'Event 1'},
{type: 'event', name: 'Event 2'},
{type: 'event', name: 'Event 3'},
{type: 'event', name: 'Event 4'}
];
complexFilter = (item, index) => item.type === 'event' && index % 2 !== 0;
}
home.component.html
<h1>All items</h1>
<div *ngFor="let item of array">
{{item.name}}
</div>
<h1>Only logs</h1>
<div *ngFor="let item of array | dynamicFilter: { type: 'log'}">
{{item.name}}
</div>
<h1>Complex filter</h1>
<div *ngFor="let item of array | dynamicFilter: complexFilter">
{{item.name}}
</div>
输出将是
All items
Log 1
Log 2
Log 3
Log 4
Event 1
Event 2
Event 3
Event 4
Only logs
Log 1
Log 2
Log 3
Log 4
Complex filter
Event 2
Event 4
如您所见,您可以在模板中提供简单的过滤器对象或复杂的过滤器回调函数。
你可以找到dynamicFilter管道here的源代码。