使用 angularfire 从 Firestore 过滤数据
Filter data from Firestore whit angularfire
我正在尝试使用 Angularfire 的查询集合从 Firestore 中过滤数据:https://github.com/angular/angularfire2/blob/master/docs/firestore/querying-collections.md 我对这种方法有点困惑。我已经设法通过一个按钮进行过滤,但我不知道如何在完成后重置或删除该过滤器。
过滤和重置上述过滤器的正确方法是什么?
这里我有一个 stackblitz:https://stackblitz.com/edit/query-collections-in-angularfire2
到目前为止我的代码:
service.ts
filterBy() {
this.avisos = this.afs.collection('avisos', ref => ref.where('categoria','==', 'Vehículos' )).valueChanges()
return this.avisos;
};
myComponent.ts
filtrarData() {
this.avisos = this.fs.filterBy()
return this.avisos;
};
myComponent.html
<button (click)="filtrarData()" class="btn btn-outline-primary">Vehículos</button>
在您的 firebase 服务中,有两种方法,一种是获取不带过滤器的集合,另一种是获取按给定 'categoria' 过滤的集合。
在您的组件中,当初始化(ngOnInit()
函数)时,您调用服务中的方法来检索整个集合;然后按钮 'Vehiculos' 使用您服务中给定的 'categoria' 触发函数 filtrarData()
。
过滤后,如果您想 "clean" 过滤并取回整个集合,就像使用按钮调用一样简单,就像 ngOnInit()
正在做的那样那么你的数组 this.avisos
将再次拥有整个集合:
app.component.ts
ngOnInit() {
this.getAvisos()
}
getAvisos() {
this.avisos = this.fs.getDomiciliarios()
}
filtrarData() {
this.avisos = this.fs.filterBy()
}
然后在组件app.component.html的html中:
<button (click)="getAvisos()" class="btn btn-outline-primary btn-sm mx-1">Clean Filters</button>
<span>Filter by:</span>
<button (click)="filtrarData()" class="btn btn-outline-primary btn-sm mx-1">Vehículos</button>
<hr>
顺便说一句,请注意 app.component.ts 中的 return this.avisos
行不需要执行,只有服务才需要。
此外,如果您对 firebase.service 函数进行一点标准化,以便通过 'categoria' 使用参数过滤集合,那将会很好,以防您想要为不止一种类型的数据调用它'categoria':
firebase.service.ts
filterBy(categoriaToFilter: string) {
this.avisos = this.afs.collection('avisos', ref => ref.where('categoria','==', categoriaToFilter )).valueChanges()
return this.avisos;
};
所以现在在你的 app.component.html 中你可以有类似的东西:
<button (click)="filtrarData('Vehículos')" class="btn btn-outline-primary btn-sm mx-1">Vehículos</button>
<button (click)="filtrarData('Casa')" class="btn btn-outline-primary btn-sm mx-1">Casa</button>
但考虑到您的组件 app.component.ts 将包括:
filtrarData(categoriaToFilter: string) {
this.avisos = this.fs.filterBy(categoriaToFilter)
}
我正在尝试使用 Angularfire 的查询集合从 Firestore 中过滤数据:https://github.com/angular/angularfire2/blob/master/docs/firestore/querying-collections.md 我对这种方法有点困惑。我已经设法通过一个按钮进行过滤,但我不知道如何在完成后重置或删除该过滤器。
过滤和重置上述过滤器的正确方法是什么?
这里我有一个 stackblitz:https://stackblitz.com/edit/query-collections-in-angularfire2
到目前为止我的代码:
service.ts
filterBy() {
this.avisos = this.afs.collection('avisos', ref => ref.where('categoria','==', 'Vehículos' )).valueChanges()
return this.avisos;
};
myComponent.ts
filtrarData() {
this.avisos = this.fs.filterBy()
return this.avisos;
};
myComponent.html
<button (click)="filtrarData()" class="btn btn-outline-primary">Vehículos</button>
在您的 firebase 服务中,有两种方法,一种是获取不带过滤器的集合,另一种是获取按给定 'categoria' 过滤的集合。
在您的组件中,当初始化(ngOnInit()
函数)时,您调用服务中的方法来检索整个集合;然后按钮 'Vehiculos' 使用您服务中给定的 'categoria' 触发函数 filtrarData()
。
过滤后,如果您想 "clean" 过滤并取回整个集合,就像使用按钮调用一样简单,就像 ngOnInit()
正在做的那样那么你的数组 this.avisos
将再次拥有整个集合:
app.component.ts
ngOnInit() {
this.getAvisos()
}
getAvisos() {
this.avisos = this.fs.getDomiciliarios()
}
filtrarData() {
this.avisos = this.fs.filterBy()
}
然后在组件app.component.html的html中:
<button (click)="getAvisos()" class="btn btn-outline-primary btn-sm mx-1">Clean Filters</button>
<span>Filter by:</span>
<button (click)="filtrarData()" class="btn btn-outline-primary btn-sm mx-1">Vehículos</button>
<hr>
顺便说一句,请注意 app.component.ts 中的 return this.avisos
行不需要执行,只有服务才需要。
此外,如果您对 firebase.service 函数进行一点标准化,以便通过 'categoria' 使用参数过滤集合,那将会很好,以防您想要为不止一种类型的数据调用它'categoria':
firebase.service.ts
filterBy(categoriaToFilter: string) {
this.avisos = this.afs.collection('avisos', ref => ref.where('categoria','==', categoriaToFilter )).valueChanges()
return this.avisos;
};
所以现在在你的 app.component.html 中你可以有类似的东西:
<button (click)="filtrarData('Vehículos')" class="btn btn-outline-primary btn-sm mx-1">Vehículos</button>
<button (click)="filtrarData('Casa')" class="btn btn-outline-primary btn-sm mx-1">Casa</button>
但考虑到您的组件 app.component.ts 将包括:
filtrarData(categoriaToFilter: string) {
this.avisos = this.fs.filterBy(categoriaToFilter)
}