2017-05-09 10 views
0

Ich erstelle gerade eine App mit ionic2 und Firebase für eine Klasse und ich bin auf ein Problem gestoßen. Ich poste keinen Code, weil ich nichts relevantes genug zu der Frage habe.Grabbing Keys mit Firebase

In meiner Datenbank habe ich eine "Gruppe", die Leute schaffen können. Ich brauche die "Gruppe", um a speichern zu können Liste von Benutzern Die Art, wie ich es gerade mache ist, dass Benutzer auf eine addGroup-Schaltfläche klicken und der currentUser zur Liste der Benutzer in dieser Gruppe hinzugefügt wird, indem einfach der Name der Gruppe eingegeben wird. (Ja, ich weiß Wenn Sie später ein Passwort oder etwas Ähnliches benötigen, sollten die Leute natürlich nicht einfach in der Lage sein, sich per Gruppenname anzumelden.)

* Die Namen der Gruppen werden alle unterschiedlich sein, daher sollte ich in der Lage sein, die Datenbank abzufragen einziger Bezugspunkt Das Problem ist, dass ich nicht weiß, wie man richtig ist y Abfrage der Datenbank und Abrufen des Schlüsselwerts des gewünschten Gruppenobjekts.

Ich suche weiter nach oben und finde keinen einfachen Weg, um den Schlüssel eines Objekts zu bekommen. Ich denke, das ist eine dumme Frage, aber ich bin nicht vertraut mit Typoskript, Firebase und ionic2, also bin ich ziemlich verloren in allem.

Antwort

0

Definieren Sie zunächst Ihre Datenbankstruktur. Die unten ist wahrscheinlich am besten:

groups 
    <first group> (Firebase-generated ID) 
    name: "Cat lovers" 
    users: 
     user1ID: true 
     user2ID: true 
    <second group> 
    ... 

Ich gehe davon aus, dass, wenn der Benutzer auf die Gruppe klickt er beitreten möchte, wissen Sie die Gruppen-ID. Zum Beispiel könnte es die value einer option in einer select sein.

die Liste der Gruppen-Adresse:

groups$ = this.angularFireDatabase.list('groups'); 

Um eine Liste der Gruppen in einer ausgewählten bevölkern:

<select> 
    <option *ngFor="let group of groups$ | async" [value]="group.$key"> 
    {{group.name}} 
    </option> 
</select> 

eine neue Gruppe zu erstellen:

groups$.push({name: "Dog lovers"}) 

Die select (Drop-Down) aktualisiert sich selbst.

Um einen Benutzer zu einer Gruppe hinzuzufügen:

addUserToGroup(groupId, userId) { 
    this.angularFireDatabase.list(`groups/${groupID}/users`).update(userID, true); 
} 

eine Gruppe anhand seines Namens zu finden:

// Define the shape of a group for better type checking. 
interface Group { name: string; users: {[userId: string]: boolean;}; } 

// Keep local list of groups. 
groups$: FirebaseListObservable<Group>; 
groups: Group[]; 

// Keep an updated local copy of groups. 
ngOnInit() { 
    this.angularFireDatabase.list('groups').subscribe(groups => this.groups = groups); 
} 

function findGroupByName(name) { 
    return this.groups.find(group => group.name === name); 
} 
+0

ich das meiste davon bekommen haben zu arbeiten. Gibt es eine Möglichkeit, die ID zu erhalten, ohne eine Liste zu drucken und sie anklicken zu müssen? Sagen Sie, der Benutzer gibt im Namen des Tierheims ein, dem sie beitreten wollen, dann finde ich im Typoskript die Gruppe basierend auf dem Namen, schnappe den Schlüssel und aktualisiere dann seine Benutzerliste? –

+0

Die Suchmethode existiert nicht für FirebaseListObservable. Gibt es etwas, das ich importieren muss? –

+0

Es gab einen Konflikt zwischen dem Observablen, das ich "Gruppen" nannte, und dem zwischengespeicherten Array von Gruppen. Ich habe die früheren 'Gruppen $' umbenannt. –

0

Antwort auf die Frage in Kommentar. Sie die Datenbank wie diese

abfragen können
this.group_val:any="group1" 
let group=db.list('/groups', { 
    query: { 
    orderByChild: GroupName, //here specify the name of field in groups 
    equalTo: this.group_val //here specify the value u want to search 
    } 
}); 

group.subscribe(grp=> { 
      //you can use the grup object here 
}) 
+0

Wenn ich hinzufügen: limittofirst: 1 sollte es nur ein Element richtig? Wie kann ich den Schlüssel dieses einen Elements in der Liste finden? –