将对象阵列保存到本地存储不起作用

时间:2015-09-19 13:59:33

标签: javascript angularjs local-storage

您好我正在尝试创建一个简单的客户端购物车,在我的控制器页面加载时我定义了将保存我的项目的数组对象,如果它们未定义或长度为0我将它们设置为&#39 ; []'默认情况下:

$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || [];
$scope.cart.items = $scope.cart.items || [];

这是将项目添加到购物车的功能:

$scope.addItem = function(item) {

    if (item.quantity > 0)
    {
        var cartItem = {
            id: item.id,
            description: item.class + ' item' + (item.quantity > 1 ? 's' : '') + ' to ' + $scope.details.name,
            quantity: item.quantity
        }
        // Adding item to cart array
        $scope.cart.items.push(cartItem)
        // Saving cart to storage
        $window.localStorage.setItem('cart', JSON.stringify($scope.cart));

        // Checking to see if data has indeed been stored in localstorage
        console.log(JSON.parse($window.localStorage.getItem('cart')));
    }

}

现在我的存储空间中的购物车总是空着,有时候我会玩代码并让它工作(不知道我做了什么)但是当我重新加载页面时,一切都被清除了。

2 个答案:

答案 0 :(得分:3)

您正在将cart初始化为数组,但随后为其分配属性。

它应该是一个对象:

$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || {};

此外,在push cart内的数组中需要定义数组之前。

最简单的方法可能是首先在一个对象中提供所有属性:

var newCart = {
    tickets:[],
    items:[]    
}
$scope.cart = JSON.parse($window.localStorage.getItem('cart')) || newCart ;

答案 1 :(得分:0)

您应该检查是否已将值存储为

if(!$window.localStorage.getItem('cart'))
{
// Saving cart to storage
        $window.localStorage.setItem('cart', JSON.stringify($scope.cart));
}