私は、繰り返し繰り返される要素をフィルタリングするフィルタリングソリューションを探しています。私は答えの中にある基本的なパイプソリューションを持っていますhere。フィルタにラジオボタンを使用したAngular2フィルタ/パイプ
<input [(ngModel)]='query'/>
は、同じコンポーネント内にある場合にのみ機能します。
しかし、フィルタリングされたラジオボタンから別のコンポーネント内のフィルタ値を取得する必要があります。
ここまでは私のコードです。
filter.component
<div class="topic" *ngFor="let topic of topics">
{{topic.term}}
<input [(ngModel)]="query" type="radio" name="topicFilter" [value]="topic.term"/>
</div>
grid.component
<router-outlet></router-outlet> // this pulls in the filter.component
<input [(ngModel)]="query"> // this is a text input that works as wanted (for showing what I'm wanting to achieve)
<grid-item *ngFor="let user of users | topicFilterPipe: 'topic':query">
<a [routerLink]="['user-story', user.uid]">
<h1>{{user.fname}}</h1>
</a>
{{user.topic}}
</grid-item>
filter.pipe
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'topicFilterPipe'
})
export class TopicFilterPipePipe implements PipeTransform {
public transform(value: Array<any>, keys: string, term: string) {
console.log('pipe has run');
if (!term) return value;
return (value || []).filter((item) => keys.split(',').some(key => item.hasOwnProperty(key) && new RegExp(term, 'gi').test(item[key])));
}
}
BASICA lly - テキスト入力と同じメソッドを実装しようとしましたが、選択したラジオはfilter.component
の範囲内です。しかし、私は選択された値をパイプ&に渡してから、ngModelを使ってフィルタリングするのに苦労しています。ありがとうございました!
注:私は
あなたのデータの数行よりも多くを持っている場合は、フィルタリングのためのパイプを使用するために、通常は良いアイデアではありません。これを参照してください:https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe 代わりにコンポーネント自体をフィルタリングすることができます。 – DeborahK
@DeborahK私は少なくとも500行のデータを持っています。あなたはおそらく正しいでしょう。 filter.componentでフィルタリングを処理し、grid.componentに渡すにはどうすればいいですか? – Minum
以下の答えで私の回答を見てください。 – DeborahK