首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS教程Thinkster.io第7章

AngularJS教程Thinkster.io第7章
EN

Stack Overflow用户
提问于 2014-09-02 22:07:01
回答 2查看 794关注 0票数 0

更新:本教程已经更新,下面的问题实际上已不再适用

从网站thinkster.io (免费电子书)了解有关thinkster.io的信息。但现在我被困在第7章-使用防火墙创建您自己的用户数据了。这是一个关于angularjs的教程,它适用于消防基地。

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

代码语言:javascript
复制
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.

这是代码(与站点相同),错误出现在create()函数中,并讨论了users.$save()函数,它是User.create()的片段:

代码语言:javascript
复制
users.$save(username).then(function () {
    setCurrentUser(username);
});

user.js:的完整代码

代码语言:javascript
复制
news.factory("User", function ($firebase, FIREBASE_URL, $rootScope, $log) {
    var reference, users, User;

    reference = new Firebase(FIREBASE_URL + "users");
    users = $firebase(reference);

    function setCurrentUser(username) {
        $rootScope.currentUser = User.findByUsername(username);
    }

    $rootScope.$on("$firebaseSimpleLogin:login", function (event, authUser) {
        var query = $firebase(reference.startAt(authUser.uid).endAt(authUser.uid));

        query.$on("loaded", function () {
            setCurrentUser(query.$getIndex()[0]);
        });
    });

    $rootScope.$on("$firebaseSimpleLogin:logout", function () {
        delete $rootScope.currentUser;
    });

    User = {
        create: function (authUser, username) {
            users[username] = {
                md5_hash: authUser.md5_hash,
                username: username,
                "$priority": authUser.uid
            };

            $log.debug(users);

            users.$save(username).then(function () {
                setCurrentUser(username);
            });
        },
        findByUsername: function (username) {
            if (username) {
                return users.$child(username);
            }
        },
        getCurrent: function () {
            return $rootScope.currentUser;
        },
        signedIn: function () {
            return $rootScope.currentUser !== undefined;
        }
    };

    return User;
});

编辑1:注册用户现在工作,使其工作(保存在防火墙,简单登录和数据):

代码语言:javascript
复制
users = $firebase(reference).$asObject();

请注意users.save()函数:

代码语言:javascript
复制
        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);
            });
        },
代码语言:javascript
复制
        findByUsername: function (users) {
            if (users) {
                return users;
            }
        },

编辑2:现在我在用户登录时收到一个错误(参见下面),当我想要登录时,我会得到这个函数的一个错误,query.$ on ():

代码语言:javascript
复制
TypeError: undefined is not a function
at http://localhost:9000/scripts/services/user.js:26:19
代码语言:javascript
复制
    $rootScope.$on("$firebaseSimpleLogin:login", function (event, authUser) {
        var query = $firebase(reference.startAt(authUser.uid).endAt(authUser.uid));

        query.$on("loaded", function () {
            setCurrentUser(query.$getIndex()[0]);
        });
    });

现在怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-02 23:24:41

这是对编辑2的回答:我使用了firebase(ref)、query.$loaded并搜索了正确的对象,仅此而已。也许有人有不同的答案,请张贴:)。

我终于完成了第07章!

一般而言(编辑2的解决方案):

代码语言:javascript
复制
    $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);
                }
            });
        });
    });

这不是理想的解决方案,但免费电子书(atm的写作)远非理想。再一次,这种情况可以帮助您更多地了解firebase以及它是如何使用角的。但有时你可能会感到沮丧,因为你只想读一遍教程;)。

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

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

票数 0
EN

Stack Overflow用户

发布于 2014-09-30 15:02:57

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25633141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档