2017-05-30 17 views
0

頁面中有一篇新聞報道。每次用戶點擊它,它將新聞標識和標題保存到本地存儲。我的代碼是每次單擊新項目時替換本地存儲數據。在點擊對象數組後添加新數據

如何將新數據添加到localStorage?

設置的localStorage

awardForArticleRead: function(latestNews){ 
    var articleData = {}; 
    articleData['newsId'] = latestNews.news_id; 
    articleData['newsTitle'] = latestNews.title; 
    localStorage.setItem("articleRead", JSON.stringify(articleData)); 
}, 

通話功能,同時它進入詳細信息頁面

newsDetail: function(key, id) { 
    var _this=this; 

    newsDetail = API_DATA['getLatestNews'][key]; 

    myApp.mainView.loadPage('news1.html'); 
    myApp.onPageInit("news_detail", function(page){ 
     _this.awardForArticleRead(newsDetail); 
     _this.showNewsDetails(newsDetail); 
    })  

}, 
+0

可能重複的[如何追加到HTML5 localStorage?](https://stackoverflow.com/questions/7679955/how-to-append-to-html5-localstorage) – Dana

+0

我認爲你的問題是你的localStorage密鑰設置是硬編碼的,所以每次調用'awardForArticleRead'方法時,它都會覆蓋之前的值。當你說你的代碼正在取代localStorage數據時,這就是你的意思嗎? – djfdev

+0

是@djfdev爲什麼我不能保持相同的名稱和不同的值? – Santosh

回答

1

您需要讀取舊數據,轉換爲對象(JSON.parse),添加新數據,然後寫入修改後的數據localStorage的

awardForArticleRead: function(latestNews){ 
    var store = JSON.parse(localStorage.getItem("articleRead") || '[]'); 
    store.push({ 
     newsId: latestNews.news_id, 
     newsTitle: latestNews.title 
    }); 
    localStorage.setItem("articleRead", JSON.stringify(store)); 
}, 

這將導致一系列項目,如:

[{ 
    newsId: 1, 
    newsTitle: 'title 1' 
}, { 
    newsId: 2, 
    newsTitle: 'title 2' 
}, { 
    newsId: 3, 
    newsTitle: 'title 3' 
}] 

所以其他代碼讀取localStorage必須適當地改變

或者:

awardForArticleRead: function(latestNews){ 
    var store = JSON.parse(localStorage.getItem("articleRead") || '{}'); 
    store[latestNews.news_id] = latestNews.title; 
    localStorage.setItem("articleRead", JSON.stringify(store)); 
} 

會導致數據是:

{ 
    1: 'title1', 
    2: 'title2', 
    3: 'title3', 
} 

其中1,2,3是news_id的

你有沒有顯示如何使用localStorage數據(閱讀),然後我不能說哪個更適合您

+0

你的第一個解決方案是'store.push沒有定義',但是第二個完美地工作。 – Santosh

+0

第一種方法會失敗,因爲你當前的localStorage是**不是**數組 - 你需要以某種方式說明數據類型已經改變的事實 - 如果你清除localStorage(或者至少是那個鍵),那麼你會看到代碼工作正常 –

+0

第二個工作正常,但localStorage中的數據將不會是完全正確的,直到你首先清除它 - 正如我所說的,任何使用不同「格式」的現有數據不包含在上面的代碼 –

1

沒有集中添加或追加功能,不過你可以簡單地收集舊的數據,在將它們組合編碼並將新數據替換爲本地存儲。

事情是這樣的:

function addToLocalStorage(nameOfItem, newData){ 
    var oldData = localStorage.getItem(nameOfItem); 
    if(oldData !== null) { 
     localStorage.setItem(nameOfItem, oldData + newData); 
    } else { 
     localStorage.setItem(nameOfItem, newData); 
    } 
}