我在angular2自定義過濾中有一個問題。如何強制自定義過濾器管道在angular2中執行
這是我的情景:
我的頁面包含幾個自定義組件。其中之一是負責顯示在左側頁面的數據:(componentA)
<md-list-item *ngFor="let item of items | filter : filter | sort: sort; let i = index" " >
<template [render]="itemTemplateRef" [context.item]="item"
[context.index]="index"></template>
</md-list-item>
而且,過濾器由一個自定義篩選完成:
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({ name: 'filter' })
export class FilterPipe implements PipeTransform {
transform(values: any[], filter: any): any {
if (typeof filter !== "function") return values;
return values.filter((elem) => {
return filter(elem);
});
}
}
在主網頁,我送作爲組件A的輸入屬性的功能:
public filter = (element: MyBean) => {
return (element.email !== undefined);
}
在加載頁面時,它的執行沒有任何問題。但我想單擊複選框多次更改過濾條件。 我知道這個事實,即純粹的過濾被執行,如果輸入值改變。 但我不知道,我的方案中的哪個輸入值應該更改爲強制過濾?
當我添加下面的複選框的onchange事件功能,沒有被過濾。
createFilterCondition = (searchCondition: string) => {
items.filter((element) => {
return this.doFilter(elem);
});
}
public doFilter= (element: MessagesBean) => {
return (element.email !== undefined);
}
感謝您的幫助(項目被綁定到我的組件顯示的數據)
這是一個常見的解決方法。如果它的好壞主要取決於創建陣列副本的成本是多少。如果它<100個項目並且不經常更改,則可能是好的。如果有幾千個項目,那麼我的方法可能會更有效率。 –