如何在AngularJS服务中管理cookie值?

时间:2016-01-18 22:46:45

标签: javascript angularjs cookies

AngularJS服务从对后端REST服务的调用中接收cookie。 cookie值用作变量的值,以便该变量的值可以在AngularJS应用程序中的其他模块重复重新初始化服务时持续存在,只要不再次调用REST服务来更改cookie的价值。我阅读了文档at this link,但文档中没有包含更改现有cookie值的方法。该文档也没有评论在服务模块中初始化cookie派生变量的值。

如何修改以下代码以管理整个服务生命周期中cookie值的更改,以便在后端REST调用指示它时进行更改,但是这样做在重新初始化AngularJS服务后,cookie是否仍然存在?

以下是我目前开发的代码:

Cookie由Spring RestController在后端服务器上生成,并与响应一起发送,如下所示:

response.addCookie(new Cookie("keyName", "oneValue"));

(来自服务器的响应还包括一个JSON对象,您可以在下面的http.post(..中看到。

在客户端AngularJS app中,声明变量并使用AngularJS模块代码顶部的cookie值进行填充,如下所示:

someVariable : cookies.get('keyName'),

然后在模块的方法中的两个不同点填充或更改cookie的值,具体取决于尝试调用后端的结果,如下所示:

someModule.someVariable = $cookies.put('keyName', 'oneValue');

else:  

someModule.someVariable = $cookies.put('keyName', 'anotherValue');

该模块的整个代码如下:

angular.module('someModule', ['ngCookies']).factory( 'someModule', function($rootScope, $http, $location, $cookies) {

    var someModule = {

        someVariable : cookies.get('keyName'),//populate variable

        someMethod : function(funcJSON, callback) {
            $http.post('/rest-service-url', funcJSON).then(function(response, $cookies) {
                if(response.data.content=='whatweexpect'){
                    someModule.someVariable = $cookies.put('keyName', 'oneValue');//DOES THIS CHANGE VALUE OF COOKIE?
                    callback && callback(someModule.someVariable);
                }else {
                    someModule.someVariable = $cookies.put('keyName', 'anotherValue');//DOES THIS CHANGE VALUE OF COOKIE?
                    callback && callback(false);
                }
             });
        },

        init : function() {
            //some unrelated stuff
        }
    };
    return someModule;
});

然后ng-show使用cookie的值来确定在视图中向用户显示的内容,如下所示:

<div ng-show="someVariable=='oneValue'">
    <p>oneValue says we give this content.</p>
</div>
<div ng-show="someVariable=='anotherValue'">
    <h1>anotherValue says we give this other content.</h1>
</div>
<div ng-show="someVariable==null">
    <h1>Assume the backend REST service has never been called, so give default content.</h1>
</div>

我对上述代码进行了哪些具体更改,以便通过初始化,重复调用后端REST服务以及重复重新初始化等所有更改来管理cookie的值?

0 个答案:

没有答案