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() 进行记录。