Wie man richtig die Abfrage eines FB-Liste in AngularFire2?
Entwickle ich eine Angular2 Anwendung mit FB als backend. Auf einer Unterseite möchte ich einige Aufgaben für eine Woche, die ist angegeben durch einen parameter der route.
Ich bin mit einem BehaviorSubject
als parameter an die AngularFire2 Abfrage der folgenden Art und Weise:
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");
Hier ist die FB-Abfrage:
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();
}
}
Leider die FB taskTemplates$
beobachtbar ist-nicht wieder alle Daten für den gegebenen weekId.
Bin ich davon ausgegangen, dass, sobald die weekId
werden durch Abfragen der Parameter der route, die Liste würde ihn als Abfrage parameter und die Rückgabe der Daten: { weekId: actualWeekId, ...}
.
BEARBEITEN Hinzugefügt, die ein Beispiel von gespeicherten Daten in Feuerstellung:
{
"-Kc_E0U4UOl9PPtxpzCM" : {
"description" : "asdfasdf",
"weekId" : "99f2"
},
"-Kc_E3wv3fhpUt56sM4u" : {
"description" : "another task",
"weekId" : "99f2"
}
}
So, was ich will zu tun ist, um alle Datensätze für eine bestimmte weekId
- Können Sie beispielsweise eine Darstellung Ihrer Daten in die Frage?
- Ich fügte hinzu, Beispiel Daten zu der Frage. Danke für die Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Kern des Problems scheint zu sein, die
query
angegeben, wenn die Liste beobachtbar ist erstellt.Angesichts der Struktur der Daten, es scheint, dass
orderByChild
ist, was sollte verwendet werden, wie Sie erscheinen wollen, wählen Sie die Einträge, insbesondereweekId
.Die Abfrage in der Frage der code sucht nach Einträgen, deren Schlüssel gleich der
weekid
erhalten Sie von der aktivierten route. Allerdings sind die Tasten drücken Sie Schlüssel, die wie-Kc_E0U4UOl9PPtxpzCM
.Außerdem können Sie den code vereinfachen, etwas durch das zusammensetzen der Abfrage beobachtbarer direkt aus der aktivierten route an. So etwas sollte tun, was Sie wollen:
Wenn Sie
orderByChild
Sie werden wahrscheinlich sehen, eine Konsole Warnung über eine index - wenn Sie nicht bereits eine erstellt. Sie müssen verwenden Sie die Sicherheits-Regeln zu tun. Es sollte erklärt werden, gut genug in der Dokumentation..indexOn
wegen performance überlegungen auf. Wo muss ich diese angeben?Wenn jemand mit einer harten Zeit, wie mir heute, das könnte Ihnen helfen Jungs:
Entnehmen Sie bitte
https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md
weitere Informationen!