【发布时间】:2013-12-06 21:21:52
【问题描述】:
我在使用隐式更新 (angelFire) 时没有任何问题。但是我需要我的一些数据使用显式更新。所以我在我之前使用的完全相同的 ref 上实现了angelFireCollection,但尽管 console.log 明确表示读取已被授予并尝试使用onloadcallback 和没有,我不会将数据直接输入我的分配的变量,一旦回调触发,我得到一个看起来很奇怪的对象,它包含数据但不是我期望的形式。我的范围变量以一个空集合结束。永远不会被填充。代码如下:
var streamController = function ($rootScope, $scope, $log, $location, angularFireCollection, profileService) {
//Wait for firebaseLogin...
$rootScope.$watch('firebaseAuth', init);
function init() {
if ($rootScope.firebaseAuth == false) {
return
};
var refUsers = new Firebase($rootScope.FBURL+'/users/'+$rootScope.uid);
$scope.profile = angularFireCollection(refUsers, function onload(snapshot) {
console.log(snapshot)
});
};
};
myApp.gwWebApp.controller('StreamController', ['$rootScope', '$scope', '$log', '$location', 'angularFireCollection', 'profileService',
streamController]);
}());
这是 console.log 的样子(即快照的样子):
>snapshot
T {z: R, bc: J, V: function, val: function, xd: function…}
这是返回快照之前的较早消息:
Firebase Login Succeeded! fbLoginController.js:16
FIREBASE: Attempt to read /users/529ccc5d1946a93656320b0a with auth={"username":"xxxxxxx@me.com","id":"529ccc5d1946a93656320b0a"} firebase.js:76
FIREBASE: /: "auth.username == 'admin'" firebase.js:76
FIREBASE: => false firebase.js:76
FIREBASE: /users firebase.js:76
FIREBASE: /users/529ccc5d1946a93656320b0a: "auth.id == $user" firebase.js:76
FIREBASE: => true firebase.js:76
FIREBASE:
FIREBASE: Read was allowed.
最后是所需的以空数组结尾的绑定:再次来自控制台:
$scope.profile []
有人知道我可能做错了什么吗?这就像 5 行代码。令人沮丧。
我在 angelFireCollection 工厂函数中设置了停止,并且可以看到数据被添加到该函数内的回调中的集合中,但我的绑定变量永远不会更新。
更新
好的,尝试使用 plnkr。似乎angularFireCollection 期望您返回一个项目列表。如果您检查snapshot.val(),快照将正确返回,它将是存储在 firebase 中的任何对象结构。如果您使用angularFireCollection,它确实绑定到变量但是它将非列表对象变成乱码,并且您无法使用普通点运算符访问对象用户。这要么是一个错误,要么是 angularFireCollection 的严重限制,这将导致我重新评估我可以轻松地将 firebase 用作后端。我无法共享我的 plnkr,因为它正在访问非公共数据,但明天如果我有时间,我将创建一个带有对象存储的公共 firebase 并进行演示。
【问题讨论】:
标签: firebase angularfire