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

$cookie gets data not as Map but as String

本文关键字:Map 而是 String 数据 cookie 获取      更新时间:2023-09-26

这是我的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();">

我想做的是将数据保存为Map on cookie,但'$cookies。registerInfo'被保存为字符串,我无法正确获取值…

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

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

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

关于$cookies服务的更多信息

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