1

我試圖將Firebase快照的結果作爲數組返回,以便我可以通過它們ng-repeat(默認情況下,它返回對象)最後一行是我嘗試設置的位置數組中的對象並將它們設置爲重複範圍。但我似乎對將值設置爲數組的基本概念感到困惑:/任何幫助都很棒。將Firebase快照作爲數組獲取並設置爲範圍

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    snap.forEach((child) => { 
     var item = {}; 
     item._key = snap.val(); 
     array.push(item); 
     /*$scope.discover = array*/ 
     }) 
}); 

回答

0

我相信其他的答案可以工作,但我真的不想摧毀我爲了使用另一種方法而擁有的東西。下面是我用來解決這個問題的代碼:

$scope.discover = []; 
const businessKey = $scope.finalItem.$id; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    discoverRef.child(key).on('child_added', snap => { 
     let businesRef = businessRef.child(snap.key); 
     businesRef.once('value', cb); 
    }); 
} 

getDiscoverBarContent(businessKey, snap => { 
    var snapVal = snap.val(); 
    $scope.discover.push(snapVal); 
}); 

首先,爲了防止錯誤的緣故,我們增加了頂部$scope.discover = []。 其次,我無法通過Firebase對象forEach。相反,我需要將snap.val()設置爲一個變量,並將其推送到我的$scope.discover。如預期的那樣,現在可以通過ng-repeat="place in discover track by $index"重複數據。感謝您的其他建議,但是這對我當前的代碼更好。如果重新開始,我一定會記住其他建議。

0

嘗試angularfire

Angularfire是一個方便的firebase幫手,爲您提供一些有用的工具來構建角應用程序。它包括3項主要服務。只需在每個控制器中注入您需要的那個。確保火力點已經第一次初始化:

$firebaseAuth $firebaseObject $firebaseArray

這裏是你如何使用$firebaseArray

const businessKey = '-KQ1hFH0qrvKSrymmn9d'; 
const rootRef = firebase.database().ref(); 
const discoverRef = rootRef.child('discover'); 
const businessRef = rootRef.child('businesses'); 


function getDiscoverBarContent(key, cb) { 
    let myArray = $firebaseArray(discoverRef.child(key)); 
    myArray.$loaded().then(() => { cb(a) }); 
} 

getDiscoverBarContent(businessKey, data => { 
    // ctrl.property = data 
    // $scope.property = data; 
}); 

如果我有任何語法錯誤,我很抱歉。我仍然使用經典的JS語法,不管這個es5/es6是什麼,它都叫它。

的文檔angularfire:https://github.com/firebase/angularfire/blob/master/docs/reference.md

無關,但如果你需要在角輕鬆分頁,可以救自己的麻煩和使用下列庫:https://github.com/deltaepsilon/firebase-paginator