如何在 AngularJS 应用程序中处理用户模型?
How to handle user model in an AngularJS application?
我正在重构一个 AngularJS 应用程序,几乎所有内容都存储在 $rootScope
中。
在我使用 Angular 构建的旧应用程序中,我为每个模型创建了一个服务,然后在需要时在控制器中实例化它。
I ask myself: Is it ok to store the whole user object inside the
$rootScope or what is best practice here?
如何确保在登录期间创建用户,然后在整个应用程序中传递它?
如果你不想在 $rootScope
中存储用户模型,你可以使用私有 JS 变量,它可以被 Angular 中的一些服务访问(因为工厂和服务都是单例的在 Angular).
好的补充是很难确定用户模型的存储位置,您唯一需要的是适当的封装和代码结构。
我会研究 a0-angular-storage:https://github.com/auth0/angular-storage 它非常适合存储用户信息/令牌或任何要在整个应用程序中检索的内容。
主要特点
默认使用 localStorage 或 sessionStorage,但如果不可用,则使用 ngCookies。
让你保存 JS 对象,如果你保存一个数字,你得到一个数字,而不是一个字符串
使用缓存系统,这样如果您已经有一个值,它就不会再次从商店中获取它。
一般在 $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;
});
我正在重构一个 AngularJS 应用程序,几乎所有内容都存储在 $rootScope
中。
在我使用 Angular 构建的旧应用程序中,我为每个模型创建了一个服务,然后在需要时在控制器中实例化它。
I ask myself: Is it ok to store the whole user object inside the $rootScope or what is best practice here?
如何确保在登录期间创建用户,然后在整个应用程序中传递它?
如果你不想在 $rootScope
中存储用户模型,你可以使用私有 JS 变量,它可以被 Angular 中的一些服务访问(因为工厂和服务都是单例的在 Angular).
好的补充是很难确定用户模型的存储位置,您唯一需要的是适当的封装和代码结构。
我会研究 a0-angular-storage:https://github.com/auth0/angular-storage 它非常适合存储用户信息/令牌或任何要在整个应用程序中检索的内容。
主要特点
默认使用 localStorage 或 sessionStorage,但如果不可用,则使用 ngCookies。 让你保存 JS 对象,如果你保存一个数字,你得到一个数字,而不是一个字符串 使用缓存系统,这样如果您已经有一个值,它就不会再次从商店中获取它。
一般在 $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;
});