0

我正在重构一个AngularJS 应用程序,在那里,几乎所有内容都存储在$rootScope.

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

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

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

4

3 回答 3

1

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

主要特点

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

于 2015-10-05T06:59:39.403 回答
1

通常将用户喜欢的模型存储在 $rootScope 中似乎没问题。但在我看来,这不是 angularjs 的最佳实践(但是我以前使用过 $rootScope 方式)。

工厂是 angularjs 的美丽之一。一般我们用它来调用rest服务。但您也可以使用它创建模型。此外,您还可以通过注入另一个模型轻松扩展您的模型。这只是一个想法,可能还有其他更好的选择可以在 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;
});
于 2015-10-05T07:14:24.697 回答
0

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

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

于 2015-10-05T06:59:23.230 回答