AngularFire - 嵌套的Firebase请求不起作用

时间:2014-03-08 15:56:17

标签: javascript angularjs firebase angularfire

我在控制器中有以下代码:

FirebaseService.$child('tasks').$on('loaded', function(tasks) {
    console.log('tasks loaded');
    FirebaseService.$child('taskTemplates').$on('loaded', function(taskTemplates) {
        console.log('taskTemplates loaded');
    });
});

控制台仅显示tasks loaded,并且永远不会执行第二个console.log。如果我请求这些子顺序(taskTemplates的请求不在加载回调中),它可以无缝地工作。有这种奇怪行为的原因吗?

一些背景信息:当加载任务时,我需要对它们进行检查,在某些情况下 - 只有这样 - 我想加载taskTemplates。

这是我的FirebaseService,如果有帮助的话:

app
.value('FIREBASE_URL', 'XXXXXXXXXXXX.firebaseIO.com/')
.service('FirebaseService', function($firebase, FIREBASE_URL) {
    return $firebase(new Firebase(FIREBASE_URL));
});

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我的第一个怀疑是这个错误看起来类似于this series of bugs,其中一个是在初始加载后声明只加载一次。由于FirebaseService在父路径上调用$ firebase,因此所有子数据都已在本地缓存,这将导致同步触发loaded事件(可能在您连接侦听器之前触发上面列出的错误)

但是,我无法重现您在angularFire版本0.6.0,0.7.0或最新主分支中显示的行为。这是我的复制品:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    <script src="http://cdn.firebase.com/js/client/1.0.6/firebase.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.js"></script>
    <script src="https://cdn.firebase.com/libs/angularfire/0.7.0/angularfire.min.js"></script>
</head>
<body ng-app="app" ng-controller="ctrl">

<ul>
    <li ng-repeat="log in logs">{{log}}</li>
</ul>

<script type="text/javascript">
    angular.module('app', ['firebase']).controller('ctrl', function($firebase, $scope) {
        $scope.logs = [];
        var fb = new Firebase('https://kato-sandbox.firebaseio-demo.com/');
        var ref = new $firebase(fb);
        var childA = ref.$child('alpha');
        childA.$on('loaded', function() {
            $scope.logs.push('alpha loaded');
            var childB = ref.$child('bravo');
            childB.$on('loaded', function() {
                $scope.logs.push('bravo loaded');
            })
        })
    });
</script>
</body>
</html>

希望这会帮助您缩小错误范围,尽管它本身并不是一个解决方案。