$ cookie获取的数据不是Map,而是String

时间:2015-07-09 04:22:53

标签: javascript angularjs cookies

这是我的Javascript。

app.controller('RegisterCtrl', function($scope, $cookies) {

$scope.registerInfo = {};

if($cookies.registerInfo){
angular.forEach($cookies.registerInfo, function(value, key) {
    $scope.registerInfo[key] = value;
});
}

$scope.preserve = function() {
    $cookies.registerInfo = new Map();
    angular.forEach($scope.registerInfo, function(value, key) {
        $cookies.registerInfo.set(key, value);
    });
};

我已经设置了包含以下代码的HTML。

<input type="number" ng-model="registerInfo.lunch_budget_from">
<input type="number" ng-model="registerInfo.lunch_budget_to">
<button ng-click="preserve();">

我想要做的是将数据保存为Cookie上的Map,但是'$ cookies.registerInfo'保存为String并且我无法正确获取值...

2 个答案:

答案 0 :(得分:0)

您是否尝试使用get()方法

,而不是使用点表示法获取值
var registerInfo = $cookies.get('registerInfo');

$ cookies service的更多信息

https://docs.angularjs.org/api/ngCookies/service/ $饼干

答案 1 :(得分:0)

Cookie总是字符串,没有对象,如果要将对象存储在cookie中,则需要序列化/反序列化对象:

app.controller('RegisterCtrl', function($scope, $cookies) {

$scope.registerInfo = {};

if($cookies.registerInfo){
    $scope.registerInfo = JSON.parse($cookies.registerInfo);
}

$scope.preserve = function() {
    var registerInfo = new Map();
    angular.forEach($scope.registerInfo, function(value, key) {
        registerInfo.set(key, value);
    });
    $cookies.registerInfo = JSON.stringify(registerInfo);
};

唯一的限制是,cookie的长度不得超过1K字节,包括名称和值。可能你可能会寻找localStorage,它也可以让你能够存储没有序列化/反序列化的对象

重要提示:在测试之前,可能必须删除旧的Cookie。