如何在AngularJS应用程序中处理用户模型?

时间:2015-10-05 06:45:42

标签: angularjs rootscope

我正在重构 AngularJS应用程序,几乎所有内容都存储在$rootScope中。

在我使用Angular构建的旧应用程序中,我为每个模型创建了一个Service,然后在需要时在Controller中实例化它。

  

我问自己:将整个用户对象存储在内部是否可以   $ rootScope或这里的最佳做法是什么?

如何确保在登录期间创建用户,然后在整个应用程序中传递它?

3 个答案:

答案 0 :(得分:1)

我会调查a0-angular-storage:https://github.com/auth0/angular-storage它非常适合存储用户信息/令牌或在整个应用中检索的内容。

主要特点

默认情况下使用localStorage或sessionStorage,但如果它不可用,则使用ngCookies。 让你保存JS对象,如果你保存一个数字,你得到一个数字,而不是一个字符串 使用缓存系统,这样如果你已经有了一个值,它就不会再次从商店获得它。

答案 1 :(得分:1)

通常可以在$ rootScope中存储类似模型的用户。但在我看来,这不是angularjs的最佳实践(但我之前使用过$ rootScope方式)。

工厂是angularjs的美丽之一。通常我们用它来呼叫休息服务。但你也可以用它创建一个模型。此外,您还可以通过注入另一个模型轻松扩展模型。这只是一个想法,可能还有另一种更好的选择,可以在angularjs中使用像对象这样的模型。

让我们看一个例子

 // User Model   
 app.factory('User', function() {
    var User = function(username) {
        this.username = username;
        this.email = null;
    };

    User.prototype.getDetails = function() {
        var self = this;
        return self.username;
    };

    return User;
});

// ExtendedUser Model
app.factory('ExtendedUser', function(User) {
    var ExtendedUser = function() {
       User.apply(this, arguments);
    };

    ExtendedUser.prototype = new User();

    function getEmail() {
       var self = this;
       // You can make an http call to get email like information as an extra
       self.email = "email@email.com";
       return self;
    }

    ExtendedUser.prototype.getDetails = function() {
       var self = this;
       var extendedUser = getEmail();
       return extendedUser;
    };
    return ExtendedUser;
});

答案 2 :(得分:0)

如果您不想在$rootScope中存储用户模型,您可以使用私有JS变量,Angular中的某些服务可以访问它(因为工厂和服务都是Angular中的单例)。

很好的补充是,确定用户模型的存储位置更加困难,您唯一需要的是正确的封装和代码结构。