AngularJS通过页面加载维护服务状态

时间:2015-05-26 21:39:49

标签: javascript jquery angularjs service

我是AngularJS的新手,我在与我的服务交互时遇到了一些困难。我确定有一些事情我不太了解,所以欢迎所有建议。

我的目标:我想在单个服务(提供商?)中保存与用户相关的所有信息。我希望这个服务通过页面加载来维护变量的状态。我有一个登录页面,可以重定向到我的应用程序中的主页面。我想在到达主要内容页面时保存从登录页面加载到服务中的信息。目前,只要页面重新加载,我的服务就会恢复为默认值。

我已就此主题做了大量研究,但我认为我的AngularJS架构需要修复多个问题才能实现这一目标。

AngularJS app:

var app = angular.module('AAE', []);

app.provider('userService', function() {
var userModel = {};
userModel.qGroupZero = '';
userModel.qGroupOne = '';
userModel.qGroupTwo = '';

userModel.loadChallengeQuestions = function(userEnrollmentChallenge) {
    this.qGroupZero = userEnrollmentChallenge.challengeQuestions.questionGroup[0];
    this.qGroupOne = userEnrollmentChallenge.challengeQuestions.questionGroup[1];
    this.qGroupTwo = userEnrollmentChallenge.challengeQuestions.questionGroup[2];
};

 this.$get = function() {
     return userModel;
 };
});

app.controller('EnrollmentController', ['$scope', 'userService', '$http', function($scope, userService, $http) { //Dependencies and Constructor function.

    $scope.userService = userService;

    $scope.get = function() {
        return $scope;
    };
}]);

我的登录页面是从javascript函数调用loadChallengeQuestions()。然后,应用程序将重定向到主内容页面。我的服务中的变量状态不会被维护。

我100%肯定我的问题的答案已经存在,但我找不到它。

**在旁注中,当我删除'这个。$ get'来自我的userService的功能,我现在收到一个错误,之前我没有在我的服务中使用它并且它不是一个问题...如果你可以告诉我那里有什么额外的功劳......

谢谢!

2 个答案:

答案 0 :(得分:1)

保持跨页面加载的状态

您可以使用:
- 饼干
- localstorage

localstorage比较新,但与cookies相比是更好的选择。如果你搜索已经是angularjs的一些模块,但你甚至可以直接使用它,如果你注意转换json之前存储。

关于您的服务

loadChallangeQuestons中使用localstorage存储并获取值,另外使用UserModel代替this

答案 1 :(得分:0)

如果不使用localstorage或其他一些持久性媒介,你就无法做到你所说的。在两个html页面之间重定向将破坏页面(以及Angular的)上下文。您可以使用当前页面的编码路径的查询字符串重定向到登录页面。然后,登录屏幕将在验证完成后解码并重定向回页面。您仍然需要使用localstorage来保留服务的任何内部状态,但您至少可以使用URL来维护应用程序状态。