Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS应用程序中处理用户模型?_Angularjs_Rootscope - Fatal编程技术网

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

如何在AngularJS应用程序中处理用户模型?,angularjs,rootscope,Angularjs,Rootscope,我正在重构一个AngularJS应用程序,在那里,几乎所有东西都存储在$rootScope中 在我用Angular构建的旧应用程序中,我为每个模型创建了一个服务,然后在需要时在控制器中实例化它 我问自己:将整个用户对象存储在 $rootScope或这里的最佳实践是什么 如何确保在登录时创建一个用户,然后在整个应用程序中传递它 如果您不想在$rootScope中存储用户模型,可以使用私有JS变量,该变量可以由Angular中的某些服务访问(因为工厂和服务在Angular中都是单例的) 另外一个好处

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

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

我问自己:将整个用户对象存储在 $rootScope或这里的最佳实践是什么


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

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


另外一个好处是很难确定用户模型存储在哪里,您只需要适当的封装和代码结构

我会研究a0角度存储:它非常适合存储用户信息/令牌或在整个应用程序中检索的任何东西

主要特征

默认情况下使用localStorage或sessionStorage,但如果不可用,则使用NGCookie。 允许您保存JS对象,如果您保存一个数字,您将得到一个数字,而不是字符串
使用缓存系统,这样,如果您已经有了值,它就不会再从存储中获取该值。

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

工厂是安格拉斯之美的工厂之一。通常我们使用它来调用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;
});

将模型存储在$rootScope上并构建通过范围继承规则查找模型的指令并没有什么错。