Вопрос по LocalStorage, для отображения товаров приходится перезагружать страницу

Рейтинг: 0Ответов: 0Опубликовано: 13.01.2023

Ребят, у меня такая проблема. У была такая задумка, что есть главная страница с товарами , а корзина находится на другой странице и все добавленные товары попадают туда. Есть код , все работает, сделано через LocalStorage, но , чтобы товары отобразились в корзине нужно перезагружать страницу, хотелось бы чтобы они сразу добавлялись и убирались в зависимости от того - добавил ли пользователь товар на главной странице или нет. Знаю, что есть событие storage, пробовал - не получилось, скорее всего я не правильно что-то сделал. В общем нужно, чтобы товары добавлялись и удалялись в реальном времени, а не с перезагрузкой страницы

Код главной страницы

let array = []
document.addEventListener ('click', function (e){
   const card = e.target.closest('.col__item')
      let cardDetails = {
         id: card.id,
         price: card.querySelector('.col__item-price').innerText,
         title: card.querySelector('.col__item-sub-price').innerText,
         image: card.querySelector('.col__item-img').querySelector('img').getAttribute('src'),
      }
      if (buttonHeart.classList.contains('active')) {
         cartCounter.innerText++
         contains(array,cardDetails.id)
         array.push(cardDetails)
       } else {
          cartCounter.innerText--
          removeArr(array,cardDetails.id)
       }
      function removeArr (arr,element) {
         arr.forEach((el,i)=> {
            if (el.id === element) {
               arr.splice(i, 1)
            }
         })
      }
      function contains (arr,element) {
         arr.forEach((el)=> {
            if (el.id === element) {
               element.remove()
            }
         })
      }
 window.localStorage.setItem('details', JSON.stringify(array))
 if (array.length === 0) {
   window.localStorage.removeItem('details');
 }      
})

Код страницы с корзиной

 const cartBody = document.querySelector('.cart__body')
const count = document.querySelector('.cart-counter')

const cartItems = getStorage()

window.addEventListener('DOMContentLoaded', function () {
  renderCart();
})

function getStorage() {
  return JSON.parse(localStorage.getItem('details')) || [];
}

function renderCart() {
  if (cartItems) {
    html = cartItems.map(item => toItem(item)).join(""); 
  } 
  cartBody.innerHTML = html;
  count.innerText = cartItems.length;
}

function toItem(item) {
  return `
         <div class="cart__row row" id='${item.id}'>
         <div class="row__container">
           <div class="cart__image">
              <img src="${item.image}" alt="">
            </div>
            <h5 class="cart__product-name">${item.title}</h5>
         <div class="cart__counter-wrapper counter">
              <div class="counter-minus count">-</div>
               <div class="counter-value">1</div>
              <div class="counter-plus count">+</div>
           </div>
           <div class="cart__price">${item.price}</div>
            <div class="cart__delete">X</div>
        </div>
     </div>`
}
                       

Ответы

Ответов пока нет.