2017-07-22 72 views
0

我正在使用一些AngularJS檢索指定父樹下Firebase數據庫中的值。我想也得到這個家長的價值。通過AngularJS獲取Firebase數據庫中的父值和子值值

我的數據庫結構:

enter image description here

到目前爲止,我的代碼將被命名爲每個TRIPID的PhotoUrl指定的用戶名下方。但我想獲得TripID值以及Name和PhotoUrl。問題是TripID值不在子樹中。我如何檢索它?

我的JS是這樣的:

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] 
} 
}); 

回答

1

不知道如果我理解正確的,但如果你想在旅途鍵列表:

var tripKeys = Object.keys(photosObj); 

但提取單獨的值到陣列和那麼重組對我來說感覺過於複雜。你可以只在旅行一次循環來獲取所有數據,您需要:

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

或者無需Object.keys()

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

最後一位不幸的是需要一個臨時變量,因爲火力地堡的DataSnapshot類沒有按」沒有map()功能。

+0

感謝您的回答。在Object.keys()的第二個代碼片段中,我的值是否存儲在tripKey,tripName和tripPhotoUrl中?因爲在上面的代碼中,我在html中設置了ng-repeat =「data in repeatData」,並且我使用{{data.data}}和{{data.value}}來顯示輸出。 – marcvander

+1

我在代碼中使用了更多的描述性名稱,希望它會更清晰。您需要在您的代碼中使用'{{data.tripKey}}'獲取旅行的鑰匙,旅行的名稱使用'{{data.tripName}}',旅行的照片使用'{{data.tripPhotoUrl}}' URL。 –

+0

這就是我的想法,雖然在我的HTML代碼中插入此代碼時,沒有任何內容顯示我運行代碼的時間。

{{data.tripName}}
這裏是與代碼的jsfiddle:https://jsfiddle.net/vnm1fnjh/ – marcvander