如何正确查询AngularFire2中的Firebase列表?

paw*_*que 3 querying observable firebase firebase-realtime-database angularfire2

我正在开发一个使用Firebase作为后端的Angular2应用程序.在子页面上,我想显示由route参数指定的给定周的一些任务.

我通过BehaviorSubject以下方式使用a 作为AngularFire2查询的参数:

export class PrepareComponent implements OnInit {

    private routeSub: any;
    weekId = '';

    private weekSubject: BehaviorSubject<any> = new BehaviorSubject('weekId');

    taskTemplates$: FirebaseListObservable<TaskTemplate[]>;

    constructor(private route: ActivatedRoute,
                private router: Router,
                private angularFire: AngularFire) {

        // this.taskTemplates$ = angularFire.database.list("/taskTemplates");
Run Code Online (Sandbox Code Playgroud)

以下是Firebase查询:

        this.taskTemplates$ = angularFire.database.list("/taskTemplates", {
            query: {
                equalTo: this.weekSubject
            }
        });
    }

    ngOnInit() {
        this.routeSub = this.route.params.map(
            (params: Params) => this.weekId = params[ 'weekid' ]
        ).subscribe(
            weekId => this.weekSubject.next(weekId)
        );
    }

    ngOnDestroy() {
        this.routeSub.unsubscribe();
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Firebase taskTemplates$observable没有返回给定weekId的任何数据.

我假设一旦weekId通过查询路由参数设置,列表将把它作为查询参数并返回具有:的数据{ weekId: actualWeekId, ...}.

编辑添加了存储在Firebase中的数据示例:

  {
   "-Kc_E0U4UOl9PPtxpzCM" : {
   "description" : "asdfasdf",
   "weekId" : "99f2"
  },
  "-Kc_E3wv3fhpUt56sM4u" : {
    "description" : "another task",
    "weekId" : "99f2"
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我想要的是获取给定的所有记录 weekId

Rob*_*Rob 20

如果有人现在像我这样的困难,这可能会帮助你们:

db.list('/items', ref => ref.orderByChild('size').equalTo('large'))
Run Code Online (Sandbox Code Playgroud)

请参考 https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

欲获得更多信息!

  • 以上是AngularFire2版本5及以上的解决方案! (2认同)