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

$cookie gets data not as Map but as String

这是我的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并且我无法正确获取值...

您是否尝试过使用 get() 方法而不是使用点表示法获取值

var registerInfo = $cookies.get('registerInfo');

$cookies 服务的更多信息

https://docs.angularjs.org/api/ngCookies/service/$cookies

Cookies总是字符串,没有对象,如果你想在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,它还使您能够存储对象 w/o serializing/deserializing

重要提示:在测试之前,可能需要删除旧的 cookie。