单击时在对象数组中追加新数据

时间:2017-05-30 23:53:41

标签: javascript jquery html5 local-storage html-framework-7

页面中有一篇新闻文章列表。每次用户点击它,它都会将新闻ID和标题保存到localstorage。每次点击新项目时,我的代码都会替换localstorage数据。

如何将新数据附加到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);
    })       

},

2 个答案:

答案 0 :(得分:1)

没有设置添加或追加功能,但您可以简单地收集旧数据,将它们组合在代码中并将新数据替换为本地存储。

这样的事情:

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

答案 1 :(得分: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数据,因此我无法确定哪个是更适合您的选项