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

问题描述:

我正在重构一个AngularJS应用程序,在那里,几乎所有东西都存储在$rootScope中。如何在AngularJS应用程序中处理用户模型?

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

我问自己:它是确定整个用户对象存储 $ rootScope内或在这里什么是最好的做法?

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

+0

没有什么错在$ rootScope通过范围继承规则发现模型存储模型和建筑指令。 – pixelbits

看来一般在$ 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 protected]"; 
     return self; 
    } 

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

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

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

我想看看a0-angular-storage:https://github.com/auth0/angular-storage这对存储用户信息/令牌或任何要在整个应用中检索的内容非常有用。

主要特点

用途的localStorage或sessionStorage的默认,但如果它不是,它采用ngCookies。 允许您保存JS对象,如果保存一个数字,则会得到一个数字,而不是字符串 使用缓存系统,以便如果您已有值,则不会再从该存储中获取该值。