【问题标题】:Get list of firebase entry based on query option根据查询选项获取firebase条目列表
【发布时间】:2017-06-16 15:22:19
【问题描述】:

我正在使用 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: {

            }
        });
    }
}

【问题讨论】:

  • 贴出服务代码。
  • 查询是什么?
  • 目前没有任何内容,因为不幸的是我不知道实现这一点的语法。我什至不确定该功能是否正确,因此提供帮助
  • 在 SO 上发布问题之前,您应该阅读 documentation

标签: angular typescript firebase firebase-realtime-database angularfire2


【解决方案1】:

只能查询一个字段。 (https://github.com/angular/angularfire2/issues/305#issuecomment-230936970)

您可以在收到预过滤列表后过滤第二个字段。

查询示例:

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

【讨论】:

  • 由于这是公认的答案,还请查看stackoverflow.com/questions/26700924/…,它涵盖了在某些情况下对两个值(但仍然只有一个属性)进行服务器端过滤的方法。跨度>
  • 那是pure firebase,不是必需的angularfire2。但很高兴知道! :)
  • AngularFire2 是 Firebase JavaScript SDK 的包装器。查询多个值时的功能是相同的:如果您可以将这些值组合到一个属性中(按照链接答案中描述的方式),您也可以使用 AngularFire2 对它们进行过滤..
猜你喜欢
  • 2019-01-26
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
相关资源
最近更新 更多