Вы можете объединить несколько запросов на равенство с Firestore.
Вот пример. Вы могли бы упростить это, если бы было только два фильтра - сделать две функции, где сначала вызывается Firestore с одним .where
, другим с двумя .where
, но это не будет хорошо масштабироваться, если вы добавите больше фильтров в будущем.
Компонент:
<mat-select [(ngModel)]="selectedCategoria" (ngModelChange)="filtrarBy('selectedDepartamento', selectedDepartamento)">
<mat-select [(ngModel)]="selectedCategoria" (ngModelChange)="filtrarBy('selectedCategoria', selectedCategoria)">
ngOnInit() {
this.eventos = this.fs.eventos; // subscribe or use async pipe before ngModelChange fires
}
filtrarBy(key, type) {
this.fs.filterBy(key, type);
}
Услуги:
private eventosSub = new Subject();
eventos = eventosSub.asObservable().pipe(
scan((filters, filter) => {...filters, ...filter }, {}),
switchMap(filters => {
const byFilters = this.afs.collection('eventos', ref => {
let queryRef: any = ref;
for (let key in filters) {
if (filters[key]) {
queryRef = queryRef.where(Object.keys(filters[key])[0], '==', filters[key])
}
}
return queryRef;
}).valueChanges();
return byFilters;
})
)
filtrarBy(key, type) {
this.eventos.next({[key]: type});
}
Это не проверено, только идея. Дайте мне знать, если есть