VueJs、Vuefire、Firestore:如何过滤同步的 Firestore 文档
VueJs, Vuefire, Firestore: How can I filter a synched Firestore document
使用 vuefire 允许我在 vue 实例上设置一个 firestore 对象并自动将其与 Firestore 同步。我还想为另一个数据点过滤它,但过滤会导致错误。
下面的代码 returns 需要并且工作完美的员工。 Firebase 用户 (fbUser) returns
WEBPACK_IMPORTED_MODULE_0__services_Firebase.a.collection(...).filter
is not a function
VueTools 中数据点为空
firestore() {
return {
staff: db.collection('staff').orderBy('lastname'),
fbUser: db.collection('staff').filter(s => s.email === this.current_user.email)
}
},
db.collection
不直接 returns 结果。我不知道实现,但我想 vuefire
将创建一个名为 fbUser
的数据字段并将结果保存在其中。
我认为,最好的解决方案是使用像这样的计算数据:
computed: {
fbUserFiltered () {
return this.fbUser.filter(s => s.email === this.current_user.email);
}
}
我知道这是一个老问题,但我遇到了同样的问题,想要一个更笼统的答案。
如果您想避免查询整个集合只是为了丢弃客户端上的不匹配结果,您可以在 created()
事件中使用 $bind()
函数,例如
data: () => ({
finance_staff: [],
}),
created() {
const filtered_entries = db.collection('staff').where('department', '==', 'finance');
this.$bind('finance_staff', filtered_entries);
},
或者如果您需要等待授权状态:
created() {
auth.onAuthStateChanged(async user => {
if (!user) return;
const filtered_entries = db.collection('staff').where('manager_id', '==', user.uid);
this.$bind('my_staff', filtered_entries);
});
},
注意,如果你已经知道文档ID,那就更简单了:
firestore: {
current_employee: db.collection("staff").doc("abcd1234")
},
使用 vuefire 允许我在 vue 实例上设置一个 firestore 对象并自动将其与 Firestore 同步。我还想为另一个数据点过滤它,但过滤会导致错误。
下面的代码 returns 需要并且工作完美的员工。 Firebase 用户 (fbUser) returns
WEBPACK_IMPORTED_MODULE_0__services_Firebase.a.collection(...).filter is not a function
VueTools 中数据点为空
firestore() {
return {
staff: db.collection('staff').orderBy('lastname'),
fbUser: db.collection('staff').filter(s => s.email === this.current_user.email)
}
},
db.collection
不直接 returns 结果。我不知道实现,但我想 vuefire
将创建一个名为 fbUser
的数据字段并将结果保存在其中。
我认为,最好的解决方案是使用像这样的计算数据:
computed: {
fbUserFiltered () {
return this.fbUser.filter(s => s.email === this.current_user.email);
}
}
我知道这是一个老问题,但我遇到了同样的问题,想要一个更笼统的答案。
如果您想避免查询整个集合只是为了丢弃客户端上的不匹配结果,您可以在 created()
事件中使用 $bind()
函数,例如
data: () => ({
finance_staff: [],
}),
created() {
const filtered_entries = db.collection('staff').where('department', '==', 'finance');
this.$bind('finance_staff', filtered_entries);
},
或者如果您需要等待授权状态:
created() {
auth.onAuthStateChanged(async user => {
if (!user) return;
const filtered_entries = db.collection('staff').where('manager_id', '==', user.uid);
this.$bind('my_staff', filtered_entries);
});
},
注意,如果你已经知道文档ID,那就更简单了:
firestore: {
current_employee: db.collection("staff").doc("abcd1234")
},