2017-07-22 1 views
0

Ich benutze AngularJS, um Werte in meiner Firebase-Datenbank unter einem bestimmten Elternbaum abzurufen. Ich möchte auch den Wert dieses Elternteils bekommen.Erhalte sowohl die Eltern- als auch die Kindwerte in der Firebase-Datenbank mit AngularJS

Meine Datenbankstruktur:

enter image description here

Bisher bekommt mein Code die Namen und PhotoUrl jedes tripID unter einer bestimmten Benutzer-ID. Aber ich möchte den TripID-Wert sowie den Namen und PhotoUrl erhalten. Das Problem besteht darin, dass der TripID-Wert nicht in der untergeordneten Struktur ist. Wie kann ich es abrufen?

Meine JS sieht wie folgt aus:

var app = angular.module('test', []); 

app.controller('MainCtrl', function($scope) { 
    var database = firebase.database(); 
    database.ref(`trips/${userid}/trips`).once('value') 

.then(photosSnap => { 
    var photosObj = photosSnap.val(); 
    var tripName = Object.keys(photosObj).map(key => photosObj[key].name); 
    var tripPhotoUrl = Object.keys(photosObj).map(key => photosObj[key].photourl); 

    $scope.repeatData = tripName.map(function (value, index) { 
     return { 
     data: value, 
     value: tripPhotoUrl[index] 
} 
}); 

Antwort

1

nicht sicher, ob ich das richtig verstehe, aber wenn Sie eine Liste der Reise Schlüssel wollen:

var tripKeys = Object.keys(photosObj); 

Aber die einzelnen Werte in Arrays zu extrahieren und dann ist das Neuzusammenstellen übermäßig komplex für mich. Sie können nur eine Schleife über die Fahrten einmal alle Daten, die Sie benötigen:

var trips = photosSnap.val(); 
$scope.repeatData = Object.keys(trips).map((key) => { 
    tripKey: key, 
    tripName: trips[key].name, 
    tripPhotoUrl: trips[key].photourl 
}); 

oder ohne Object.keys() zu benötigen:

var trips = []; 
photosSnap.forEach((trip) => { 
    trips.push({ 
    tripKey: trip.key, 
    tripName: trip.val().name, 
    tripPhotoUrl: trip.val().photourl 
    }); 
}); 
$scope.repeatData = trips; 

Das letzte Bit erfordert leider eine temporäre Variable, da Firebase der DataSnapshot Klasse doesn‘ t haben eine map() Funktion.

+0

Danke für die Antwort. In meinem zweiten Codefragment mit Object.keys() werden meine Werte in tripKey, tripName und tripPhotoUrl gespeichert? Weil ich in meinem obigen Code im html ng-repeat = "data in repeatData" gesetzt habe und ich {{data.data}} und {{data.value}} benutzt habe, um die Ausgabe anzuzeigen. – marcvander

+1

Ich benutzte mehr beschreibende Namen in meinem Code in der Hoffnung, es wäre klarer. Sie würden '{{data.tripKey}}' in Ihrem Code verwenden, um den Trip-Schlüssel, '{{data.tripName}}' für den Namen der Reise und '{{data.tripPhotoUrl}}' für das Foto der Reise zu erhalten URL –

+0

Das ist, was ich dachte, obwohl wenn ich dies in meinem HTML-Code einfügen, nichts zeigt, wenn ich den Code ausführen.

{{data.tripName}}
ist hier ein jsfiddle mit dem Code: https://jsfiddle.net/vnm1fnjh/ – marcvander

Verwandte Themen