我对Firebase Api和ref.on()
方法存在问题,因为列表快照列表。看:
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);
输出:
All Rooms: undefined
Rooms length: undefined
或:
在我的$scope
控制器中添加了Rooms
并且:
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;
},
但问题是continuos undefined
并且存在新问题:
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- Room
我搜索过已有的主题,但我没有找到这个。
答案 0 :(得分: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()进行记录。