2015-08-28 85 views
0

我有一個Firebase Api和ref.on()列表快照列表的問題。看:Firebase快照列表undefined

https://www.firebase.com/docs/web/guide/retrieving-data.html

間工廠:

.factory('Rooms', function ($firebaseObject, ObjectFactory) { 
    var ref = new Firebase(firebaseUrl + '/rooms'); 

    var onComplete = function (error) { 
     if (error) { 
      console.log('Data could not be saved: ', error); 
     } 
     else { 
      console.log('Data saved successfully!'); 
     } 
    }; 

    return { 
     all: function() { 
      ref.on("value", function(snapshot) { 
       return snapshot.val(); 
      }, function (errorObject) { 
       console.log("The read failed: " + errorObject.code); 
      }); 
     }, 

控制器:

.controller('RoomsCtrl', function ($scope, Rooms, $state) { 
     var rooms = Rooms.all(); 

     console.log('All Rooms:', rooms); 
     console.log('Rooms length:', rooms); 

輸出:

在我 Rooms控制器

新增$scope和:

All Rooms: undefined 
Rooms length: undefined 

all: function() { 
      $scope.result = {}; 

      ref.on("value", function(snapshot) { 
       $scope.result = snapshot.val(); 
      }, function (errorObject) { 
       console.log("The read failed: " + errorObject.code); 
      }); 

      return $scope.result; 
     }, 

但問題是,連續的undefined,新的問題出現:

Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- Room

我搜索已經是話題,但我並沒有發現這一點。

Returning undefined object from a firebase snapshot

回答

0

有很多與你的代碼的問題。首先,Rooms.all()實際上並沒有返回任何東西。其次,Firebase調用是異步的,因此您需要使用AngularFire,$ q或將函數封裝在$ timeouts中。

下面是使用$ firebaseArray的示例。

.factory('Rooms', function ($firebaseArray) { 
    var ref = new Firebase(firebaseUrl + '/rooms'); 

    return { 
     all: function() { 
      return $firebaseArray(ref); 
     }, 
    } 
}) 


.controller('RoomsCtrl', function ($scope, Rooms, $state) { 
    var $scope.rooms = Rooms.all(); 
}); 

通過將rooms綁定到範圍,您可以在視圖中看到輸出。但是,如果您確實想使用console.log,則在下載數據後,您需要使用$loaded()進行記錄。

+0

問題是我需要使用帶有控制器的工廠,並且Firebase數據不會爲我過濾。也沒有加載$。 –

+0

Factory with snapshot.val()的輸出:所有房間:匿名(快照) –