簡體   English   中英

如何修復在localStorage中存儲為單個字符串的數組中的項目

[英]how to fix items from an array being stored as a single string in localStorage

我創建了一個簡單的購物系統,如果您單擊所需的商品,它會將商品添加到購物車中。 創建此功能后,我決定將其保存在頁面重新加載時。 我目前正在使用 localStorage,但如果您知道更好的方法,請告訴我,我也是購物車中要保存到新 HTML 頁面的物品。 我遇到的問題是,當我單擊一個按鈕時,它會將該按鈕的名稱保存到一個數組列表中。 然后將該數組列表保存到 localStorage,但不是將其保存為單獨的字符串,而是將其保存為一個字符串。 有想法該怎么解決這個嗎? 謝謝你。

代碼:

const cartItems = [];

function cartAmount() {
    var itemsInCart;

    itemsInCart = document.getElementById('cartamount');

    if(localStorage.length >= 1) {
        itemsInCart.style.visibility = "visible";
    }

    itemsInCart.innerHTML = localStorage.length;
}

function addCart(id) {
    var itemVal, a;

    a = document.getElementById(id);
    itemVal = a.textContent;
    console.log(itemVal);


    if(cartItems.includes(a.textContent)) {
        console.log('item already in cart');
    } else {
        cartItems.push(itemVal);
        cartAmount();
        console.log('added Item to cart');
    }
}

function saveCart() {
    cartAmount();
    window.localStorage.setItem('cart', cartItems);
}

HTML:

<ul id="wrapper">
        <li>
            <a href="#" id="item1" onclick="addCart(this.id); saveCart();">Drum</a>
        </li>
        <li>
            <a href="#" id="item2" onclick="addCart(this.id); saveCart();">Stand Off</a>
        </li>
        <li>
            <a href="#" id="item3" onclick="addCart(this.id); saveCart();">Seat</a>
        </li>
        <li>
            <a href="#" id="item4" onclick="addCart(this.id); saveCart();">Drum Sticks</a>
        </li>
        <li>
            <a href="#" id="item5" onclick="addCart(this.id); saveCart();">Symbols</a>
        </li>
        <li>
            <a href="#" id="item6" onclick="addCart(this.id); saveCart();">Keyboard</a>
        </li>
        <li>
            <a href="#" id="item7" onclick="addCart(this.id); saveCart();">High Hat</a>
        </li>
        <li>
            <a href="#" id="item8" onclick="addCart(this.id); saveCart();">Bass Drum</a>
        </li>
        <li>
            <a href="#" id="item9" onclick="addCart(this.id); saveCart();">Snare Drum</a>
        </li>
        <li>
            <a href="#" id="item10" onclick="addCart(this.id); saveCart();">Jake Inator</a>
        </li>
        <li>
            <a href="#" id="item11" onclick="addCart(this.id); saveCart();">Habachi</a>
        </li>
    </ul>

不用運行window.localStorage.setItem('cart', cartItems) ,而是用window.localStorage.setItem('cart', JSON.stringify(cartItems))替換它這實際上會將您的數組編碼為 JSON 字符串。

然后,當您想檢索該數組時,您可以運行JSON.parse(window.localStorage.getItem('cart')) ,這將返回您保存的數組。 理想情況下,您可以將JSON.parse包裝在try {} catch(e) {}中,這樣您就可以確保在 localStorage 值為 null 時您的應用不會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM