我在控制器中有以下代码:
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));
});
非常感谢你的帮助!
答案 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>
希望这会帮助您缩小错误范围,尽管它本身并不是一个解决方案。