私が達成しようとしているのは、フィルタがオンまたはオフに切り替わる度に更新されるNgForで複数のフィルタを切り替えることができることです。私は(簡潔にするため縮小)している私のapp.module.tsでカスタムパイプ製品フィルター?
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filterProducts'
})
export class FilterProducts implements PipeTransform {
transform(products: any[], args: {[field : string] : string[]}): any[] {
if (!products) return [];
if (!args) return products;
return products.filter((pr: any) => {
for(let field in args) {
if(args[field ].indexOf(pr[field]) === -1) {
return false;
}
}
return true;
});
}
}
:
私はこのパイプ持っている私の製品コンポーネントで
import { FilterProducts } from '../pages/products/productsFilter.pipe';
@NgModule({
declarations: [
FilterProducts
]
})
を私が持っている:
public filterArgs : {[field : string] : string[]} = {};
constructor() { }
addBrandFilter(brands: string[]) {
this.addFilter('brand', brands);
}
addFilter(field: string, values: string[]): void {
this.filterArgs[field] = values;
}
そして私のNgForで私は持っています(簡潔さのために簡略化):
*ngFor="let product of products | filterProducts: filterArgs;"
<li class="search-filters__item" (click)="addBrandFilter(['Brand Name'])">Brand Name</li>
テンプレートのフィルタリング設定の方法は、価格、ブランド、タイプのサブセクションがあります。これらの中には、ユーザーが0〜50または50〜100などの価格をクリックできるようなボタンがあります。理想的には、これらを同時に適用できるようにしたいと思います。したがって、0-50と50-100が選択され、ngForが適切にフィルタリングされます。
これを達成する方法について誰でも私に助言を与えることができますか?私はどこでも検索し、検索ボックスやドロップダウンに基づいてパイプを見つけることができます。
EDIT
私は今@PierreDucによって私に与えられた助けを反映するために、これを更新しました。私は現在、関連するフィルタをfilterArgsに渡すのに苦労しています。私は今進行に@PierreDucへの感謝を反映するために、再度これを更新した
EDIT 2
。現在、ngForは、(クリック)を通過したブランド名にフィルタリングしていません。
ありがとうございます。
ありがとう、これはすごくうまくいきました。これをどのようにしてフィルターセットからクリックしてngForをフィルターに掛けることができるようにするのですか? £0〜£50、ブランド名が "TypeA"の製品を見たいとしますか? (それが理にかなっていれば申し訳ありません)。 – Alsh
私の答えはまだテストされていないコードを更新しました:) – PierreDuc
ありがとう、私はこれを実装しましたが、 "addBrandFilter関数を実行しようとすると、"未定義のプロパティ 'name'を読み込めません。更新されたコード)。何か案は? :) – Alsh