Bonjour,

J'en ai marre que l'on me rajoute une couche de pub quand j'écoute la radio via une application alors j'ai décidé d'en créer une et tout fonctionne sauf l'ajout aux radios favorites via le locaStorage qui sauvegarde bien 1 radio mais si j'en sélectionne une autre, elle écrase la précedente :

function updateFavoritesUI(favorites) {
  var favoritesContainer = document.getElementById('radios-favorites');
  favoritesContainer.innerHTML = ''; // Effacer le contenu actuel

  favorites.forEach(function (favorite) {
    // Créer et ajouter la nouvelle carte favori à l'interface utilisateur
    var newFavoriteCard = document.createElement('div');
    newFavoriteCard.classList.add('card', 'ps-0', 'pe-0', 'swiper-slide');

    var favoriteCardContent = `
      <div class="card__image">
        <img class="img-fluid" src="${favorite.image}" alt="Radio">
      </div>
      <div class="card__content">
        <span class="card__title mt-1">${favorite.title}</span>
        <audio data-src="${favorite.audioSrc}"></audio>
      </div>
    `;

    newFavoriteCard.innerHTML = favoriteCardContent;
    favoritesContainer.appendChild(newFavoriteCard);
  });
}

function saveFavoritesToStorage(favorites) {
  localStorage.setItem('radioFavorites', JSON.stringify(favorites));
}

[(https://www.cjoint.com/doc/24_01/NAoq7ZQEME7_localStorage.png)]

Je vous remercie pour votre aide

3 réponses


Il faut que tu récupère les données du localstorage pour fusionner les nouvelle avec les anciennes (a voir comment est appelé ton saveFavoritesToStorage) 

Effectivement il faudra que tu ressorte les données brutes du localStorage, que tu fusionne et que tu remette la donnée dedans, ça marchera très bien mais par contre ça "sortira" de l'usage de base pour lequel est prévu localStorage (du stockage de données à la manière des cookies mais côté client, comme des préférences utilisateurs, des tokens éventuellement etc.). Un petit exemple (c'est un peu crade j'ai plus l'habitude du js tout nu comme ça haha)

Et du coup si tu veux quelque chose de plus idiomatique si je puis dire, tu peux regarder du côté de IndexedDB qui t'offre une API bas niveau supportée par la majorité des navigateurs, absolument affreuse à utiliser out of the box mais qui a des wrappers vraiment pas dégueulasses comme Dexie.js si ajouter un peu de dépendence ne te dérange pas.

Si dans le futur t'as d'autre stockages à faire côté client et qu'ils peuvent dépasser la limite du localStorage par exemple, ça peut être pas mal. A noter également que le localStorage peut être clear un peu arbitrairement.

barpoi78
Auteur

Merci pour votre aide, je vais regarder ça quand j'aurais un moment.