Firebase 快照列表未定义
Firebase snapshot list undefined
我对列表快照列表的 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
或:
在我的 Rooms
控制器中添加了 $scope
并且:
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
我已经搜索了主题,但没有找到任何内容。
你的代码有很多问题。首先,Rooms.all() 实际上并没有 return 任何东西。其次,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() 进行记录。
我对列表快照列表的 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
或:
在我的 Rooms
控制器中添加了 $scope
并且:
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
我已经搜索了主题,但没有找到任何内容。
你的代码有很多问题。首先,Rooms.all() 实际上并没有 return 任何东西。其次,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() 进行记录。