根据查询选项获取 firebase 条目列表
Get list of firebase entry based on query option
我正在使用 Angular 2 构建网络应用程序。当子节点中满足一个或多个条件时,我正在尝试从 firebase 检索数据。例如,下面是我的 firebase 的结构。我想选择 approverEmail 为 approver1@mail.com 以及状态为 0 的条目(两者必须同时满足)。
{
"BugList" : {
"Company 1" : {
"-Kbne6WxelgI6Qv9T0eP" : {
"approverEmail" : "approver1@mail.com",
"firstName" : "Jack",
"lastName" : "Daniels",
"noteToApprover" : "Gooday mate",
"status" : 0,
},
"-Kbne6WxelgI6Qv9T0QP" : {
"approverEmail" : "approver2@mail.com",
"firstName" : "Tom",
"lastName" : "Riddle",
"noteToApprover" : "Howdy",
"status" : 1,
}
}
},
}
目前,我使用的是关于此主题的信息有限的 angularFire2。这就是我目前所拥有的,我被卡住了
forms.service.ts
getPendingApproval() {
var currentUser: User = this.userService.getCurrentUser();
const queryList = this.af.database.list('/BugList/' + currentUser.company, {
query: {
// email field match currentUser.email && status == 0
}
});
}
在我的 app.component.ts
getList() {
this.list = this.formsService.getPendingApproval()
}
我的代码 forms.service.ts
@Injectable()
export class FormsService {
constructor(private af: AngularFire, private userService: UserService) { }
saveToFirebase(bug: Bug) {
const bugRef = this.af.database.list('/BugsList/' + bug.companyName);
return bugRef.push(timesheet)
}
getPendingApproval() {
var currentUser: User = this.userService.getCurrentUser();
const queryList = this.af.database.list('/BugsList/' + currentUser.company, {
query: {
}
});
}
}
只能查询一个字段。 (https://github.com/angular/angularfire2/issues/305#issuecomment-230936970)
您可以在收到 pre-filtered 列表后过滤第二个字段。
查询示例:
query: {
orderByChild: 'email', // field name !
equalTo: 'test@web.de' // search criteria
}
过滤使用 Subject
:
const filterSubject = new Subject(); // import {Subject} from 'rxjs/Subject';
const queryObservable = af.database.list('/items', {
query: {
orderByChild: 'email',
equalTo: filterSubject
}
});
// subscribe to changes
queryObservable
.map(qis => qis.filter(q => q.status == 0)) // FILTER HERE FOR STATUS
.subscribe(queriedItems => {
console.log(queriedItems);
});
// trigger the query
filterSubject.next('test@web.de');
// re-trigger the query!!!
filterSubject.next('huhu@gmail.com');
文档:https://github.com/angular/angularfire2/blob/master/docs/4-querying-lists.md
我正在使用 Angular 2 构建网络应用程序。当子节点中满足一个或多个条件时,我正在尝试从 firebase 检索数据。例如,下面是我的 firebase 的结构。我想选择 approverEmail 为 approver1@mail.com 以及状态为 0 的条目(两者必须同时满足)。
{
"BugList" : {
"Company 1" : {
"-Kbne6WxelgI6Qv9T0eP" : {
"approverEmail" : "approver1@mail.com",
"firstName" : "Jack",
"lastName" : "Daniels",
"noteToApprover" : "Gooday mate",
"status" : 0,
},
"-Kbne6WxelgI6Qv9T0QP" : {
"approverEmail" : "approver2@mail.com",
"firstName" : "Tom",
"lastName" : "Riddle",
"noteToApprover" : "Howdy",
"status" : 1,
}
}
},
}
目前,我使用的是关于此主题的信息有限的 angularFire2。这就是我目前所拥有的,我被卡住了
forms.service.ts
getPendingApproval() {
var currentUser: User = this.userService.getCurrentUser();
const queryList = this.af.database.list('/BugList/' + currentUser.company, {
query: {
// email field match currentUser.email && status == 0
}
});
}
在我的 app.component.ts
getList() {
this.list = this.formsService.getPendingApproval()
}
我的代码 forms.service.ts
@Injectable()
export class FormsService {
constructor(private af: AngularFire, private userService: UserService) { }
saveToFirebase(bug: Bug) {
const bugRef = this.af.database.list('/BugsList/' + bug.companyName);
return bugRef.push(timesheet)
}
getPendingApproval() {
var currentUser: User = this.userService.getCurrentUser();
const queryList = this.af.database.list('/BugsList/' + currentUser.company, {
query: {
}
});
}
}
只能查询一个字段。 (https://github.com/angular/angularfire2/issues/305#issuecomment-230936970)
您可以在收到 pre-filtered 列表后过滤第二个字段。
查询示例:
query: {
orderByChild: 'email', // field name !
equalTo: 'test@web.de' // search criteria
}
过滤使用 Subject
:
const filterSubject = new Subject(); // import {Subject} from 'rxjs/Subject';
const queryObservable = af.database.list('/items', {
query: {
orderByChild: 'email',
equalTo: filterSubject
}
});
// subscribe to changes
queryObservable
.map(qis => qis.filter(q => q.status == 0)) // FILTER HERE FOR STATUS
.subscribe(queriedItems => {
console.log(queriedItems);
});
// trigger the query
filterSubject.next('test@web.de');
// re-trigger the query!!!
filterSubject.next('huhu@gmail.com');
文档:https://github.com/angular/angularfire2/blob/master/docs/4-querying-lists.md