javascript - Angularfire - 如何使用 snapshotChanges() 应用“where”条件
问题描述
我对 angular 和 firebase 比较陌生,并且当前使用 angular/fire 在服务中检索具有以下条件的集合;
服务.ts
get posts() {
return this.afs
.collection<Todo>('posts', ref => {
let query:
| firebase.firestore.CollectionReference
| firebase.firestore.Query = ref;
query = query.where('posted', '==', true);
return query;
})
.snapshotChanges()
.pipe(
map(action =>
action.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
}),
),
);
}
在组件中,我订阅 observable 以检索“已发布”字段等于true的帖子。以下内容按预期工作,仅记录“已发布”帖子。
组件.ts
ngOnInit() {
this.service.posts.subscribe(posts => {
console.log(posts);
})
}
但是,当添加“已发布”字段等于false的帖子时,该帖子也被记录在控制台中。
部分对我来说是有意义的,因为集合已更新并且组件已订阅它,从而导致更新。
但是,我的期望是,如果集合发生了变化,它仍然会应用条件并再次过滤掉。
谢谢大家帮助新手
解决方案
我不太清楚angularfire2
,firebase
但你可以利用数组的map
运算符和运算符。filter
尝试:
ngOnInit() {
this.service.posts.pipe(
map(posts => posts.filter(post => post.posted)),
).subscribe(posts => {
console.log(posts);
})
}
推荐阅读
- python - 用于 influxdb 的 python 包的 DataFrameClinet 类仅上传数据框中的最后一行
- java - java tika如何将html转换为保留特定元素的纯文本
- python-3.x - Django - 无法通过完整日历删除数据库中的对象
- angular - 使用动态变量发布请求
- python - 从 google.cloud 导入数据存储给出“ImportError:无法导入名称“collections_abc”
- javascript - 如何在 Node js 中使用 Stream 同步读取文件?
- google-apps-script - 我的 onOpen 触发器只运行了一半的脚本
- python - 从txt加载数据并用python从文件中加载header
- elasticsearch - Elasticsearch + Logstash - 接收事件时索引来自不同来源的数据
- python - 在情节中正确订购月份 - Python pandas matplotlib