我正在重构 AngularJS应用程序,几乎所有内容都存储在$rootScope
中。
在我使用Angular构建的旧应用程序中,我为每个模型创建了一个Service,然后在需要时在Controller中实例化它。
我问自己:将整个用户对象存储在内部是否可以 $ rootScope或这里的最佳做法是什么?
如何确保在登录期间创建用户,然后在整个应用程序中传递它?
答案 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中的单例)。
很好的补充是,确定用户模型的存储位置更加困难,您唯一需要的是正确的封装和代码结构。