我正在尋找一種過濾解決方案,將過濾一組重複的元素。我在答案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進行過濾。謝謝!
注:我很新的angular2 +過濾器組件必須保持在一個單獨的組件
它通常不是,如果你有比數據的幾行更多地使用管道用於過濾一個好主意。看到這個:https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe 你可以改爲過濾組件本身。 – DeborahK
@DeborahK我至少有500行數據。所以你可能是正確的。我將如何處理filter.component中的過濾並將其傳遞到grid.component中 – Minum
請參閱下面的答案中的回覆。 – DeborahK