2016-04-08 3 views
0
$scope.toCart = function(id,item){ 

     var toSaveArray = []; 
     var toSaveObj = { 
     id: item._id, 
     name : item.name, 
     image : item.image[0], 
     price : item.price, 
     discount_price : item.discount_price, 
     qty : 1 
     } 

     toSaveArray.push(toSaveObj); 

     var fromSaved = JSON.parse(localStorage.getItem('cart')); 

     if(fromSaved){ 
      for(i=0;i<fromSaved.length;i++){ 
      if(fromSaved[i].id == id){ 
      fromSaved[i].qty += 1; 
      toSaveArray.push(fromSaved); 
      } 
     } 
     } 

     localStorage.setItem('cart',JSON.stringify(toSaveArray)); 

    } 

Если элемент существует, добавьте один qty, иначе просто добавьте объект в массив. Но с этой простой логикой у меня не было рабочего кода. Над кодом сломан.Борьба с добавлением в корзину Локальная логика хранения

+1

'выше код broken' Как так? Что он делает? –

+0

Что конкретно нарушено? –

+1

Я думаю, что ваша логика здесь вернулась к 'toSaveArray.push (fromSaved):' Из того, что я вижу, было бы гораздо более целесообразно нажать 'toSaveObj' на существующее сохранение (' fromSaved'), а затем сохранить его , – DBS

ответ

2

я решить некоторые логические ошибки:

$scope.toCart = function(id, item) { 
    var cart = JSON.parse(localStorage.getItem('cart')); 
    if (!cart) { 
     cart = []; 
    } 

    var index = cart.findIndex(function (cartItem) { 
     return cartItem.id === item._id; 
    }); 

    if (index !== -1) { 
     cart[index].qty += 1; 
    } else { 
     cart.push({ 
      id: item._id, 
      name : item.name, 
      image : item.image[0], 
      price : item.price, 
      discount_price : item.discount_price, 
      qty : 1 
     }); 
    } 

    localStorage.setItem('cart',JSON.stringify(cart)); 

} 
+1

будет ли ошибка, если корзина пуста в первый раз? –

+0

@ cody-jonas решить его, спасибо –

+0

Это действительно действительно умное решение! –

0

Ваш код делает неправильно в этих шагах:

  • Сравнивая предыдущие item._id с параметром id
  • Всегда сохраняя item параметр
  • Ведения ненужного для

    $scope.toCart = function(item){ 
    
        var toSaveArray = []; 
        var toSaveObj = { 
         id: item._id, 
         name : item.name, 
         image : item.image[0], 
         price : item.price, 
         discount_price : item.discount_price, 
         qty : 1 
        }; 
    
        var fromSaved = JSON.parse(localStorage.getItem('cart')); 
    
        if(fromSaved){ 
         var savedItem = $filter('filter')(fromSaved, {id: item._id}); 
         if (savedItem) { 
          fromSaved[fromSaved.indexOf(savedItem[0])].qty++; 
         } 
    
         toSaveArray = fromSaved; 
        } else { 
         toSaveArray.push(toSaveObj); 
        } 
    
        localStorage.setItem('cart',JSON.stringify(toSaveArray)); 
    }; 
    

Приведенный выше код должен охватывать все это.

Смежные вопросы