Javascript AngularJS教程Thinkster.io第7章 更新:教程已更新,以下问题不再适用

Javascript AngularJS教程Thinkster.io第7章 更新:教程已更新,以下问题不再适用,javascript,angularjs,firebase,firebasesimplelogin,Javascript,Angularjs,Firebase,Firebasesimplelogin,从thinkster.io(免费电子书)网站了解AngularJS。但是现在我被困在了。这是一个关于angularjs的教程,它与firebase一起工作 我已经根据网站编写了所有代码,但是当我想注册用户时,我会遇到这些控制台错误。它将创建用户(在firebase-simplelogin中),但不会创建用户对象(在firebase-data中): 这是代码(与站点相同),错误在create()函数中,并讨论用户。$save()函数,User.create()的代码片段: user.js的完整代

从thinkster.io(免费电子书)网站了解AngularJS。但是现在我被困在了。这是一个关于angularjs的教程,它与firebase一起工作

我已经根据网站编写了所有代码,但是当我想注册用户时,我会遇到这些控制台错误。它将创建用户(在firebase-simplelogin中),但不会创建用户对象(在firebase-data中):

这是代码(与站点相同),错误在create()函数中,并讨论用户。$save()函数,User.create()的代码片段:

user.js的完整代码:

news.factory(“用户”,函数($firebase,firebase\u URL,$rootScope,$log){
var参考,用户,用户;
参考=新Firebase(Firebase_URL+“用户”);
用户=$firebase(参考);
函数setCurrentUser(用户名){
$rootScope.currentUser=User.findByUsername(用户名);
}
$rootScope.$on(“$firebaseSimpleLogin:login”),函数(事件,authUser){
var query=$firebase(reference.startAt(authUser.uid).endAt(authUser.uid));
查询。$on(“已加载”,函数(){
setCurrentUser(查询$getIndex()[0]);
});
});
$rootScope.$on(“$firebaseSimpleLogin:logout”,函数(){
删除$rootScope.currentUser;
});
用户={
创建:函数(authUser、用户名){
用户[用户名]={
md5_散列:authUser.md5_散列,
用户名:用户名,
“$priority”:authUser.uid
};
$log.debug(用户);
用户。$save(用户名)。然后(函数(){
setCurrentUser(用户名);
});
},
findByUsername:函数(用户名){
如果(用户名){
返回用户。$child(用户名);
}
},
getCurrent:函数(){
返回$rootScope.currentUser;
},
signedIn:函数(){
返回$rootScope.currentUser!==未定义;
}
};
返回用户;
});
编辑1: 现在注册一个用户就可以了,让它工作起来(保存在firebase中,简单的登录和数据):

users=$firebase(参考)。$asObject();
请注意users.save()函数:

findByUsername:function(用户){
如果(用户){
返回用户;
}
},
编辑2: 现在,我在用户登录时遇到一个错误(见下文),当我想登录时,我在这个函数query上遇到一个错误。$on():

$rootScope.$on(“$firebaseSimpleLogin:login”),函数(事件,authUser){
var query=$firebase(reference.startAt(authUser.uid).endAt(authUser.uid));
查询。$on(“已加载”,函数(){
setCurrentUser(查询$getIndex()[0]);
});
});

现在怎么了?

这是编辑2的答案:我使用了firebase(ref),query.$加载并搜索了正确的对象,就是它。也许有人有不同的答案,请张贴:)

我终于完成了第07章

一般情况下(编辑2的解决方案):

这不是一个理想的解决方案,但免费电子书(atm的写作)是远远不够理想的。同样,这些情况有助于您进一步了解firebase api以及它如何与angular一起工作。但是,当您只想阅读教程时,有时可能会感到沮丧;)

注意!我保存了User对象,并将User对象传递给findUsername()和setCurrentUser()函数,而不仅仅是User.username


您还可以使用本机数组函数,如some()。

我认为您的系统使用了Angularfire的较新版本(版本>=0.8)。这意味着要通过数组循环运行…需要在用户定义字段的末尾附加
$asArray()
。检查Firebase的更新

你用的是什么版本的AngularFire?哇。这些是你在第7部分遇到的唯一问题?认为自己是幸运的。明天我将发布一个问题,上面有我遇到的所有障碍。大多数在
user.js
服务中,但我在
nav.js
控制器中也有一个。@s3z:我在其他部分也有一些问题,但这些都是令人讨厌的问题。免费电子书在当前版本中并不完整/正确。@David:angularfire=v0.8.2,firebase=v1.0.21Thinkster正在努力编写Angular教程的下一次迭代,并且进展顺利@一周前,大卫和我与他们进行了一次简短的交谈。要用像AngularFire这样的快速移动标记来更新如此优秀的材料并不容易。你能在第二次更新中发布你的代码解决方案吗?你的回答把我弄糊涂了。我也被这部分卡住了。谢谢,但我不明白。我在注册一个新用户后,实际上遇到了这个类型错误和另一个类型错误。我已经把我的问题贴在这里了。有什么想法吗?谢谢。此答案的更新解决了第二个TypeError:)
TypeError: undefined is not a function
at Object.User.create (http://localhost:9000/scripts/services/user.js:46:19)
at http://localhost:9000/scripts/controllers/auth.js:32:22
etc.
users.$save(username).then(function () {
    setCurrentUser(username);
});
        create: function (authUser, username) {
            users[username] = {
                md5_hash: authUser.md5_hash,
                username: username,
                $priority: authUser.uid
            };

            $log.debug(users);

            users.$save().then(function () {
                setCurrentUser(users);
            });
        },
TypeError: undefined is not a function
at http://localhost:9000/scripts/services/user.js:26:19
    $rootScope.$on("$firebaseSimpleLogin:login", function (event, authUser) {
        var query = $firebase(reference).$asObject();

        query.$loaded(function (result) {
            angular.forEach(result, function (key) {
                if (key.md5_hash === authUser.md5_hash) {
                    setCurrentUser(key);
                }
            });
        });
    });