Добавить новые данные в массив объектов по клику
На странице есть список новостной статьи. Каждый раз, когда пользователь нажимает на него, он сохраняет идентификатор и заголовок новости в localalstorage. Мой код заменяет данные локального хранилища каждый раз, когда я нажимаю новый элемент.
Как добавить новые данные в 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 ответа
Вам нужно прочитать старые данные, преобразовать в объект (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 (прочитайте), я не могу сказать, какой вариант лучше для вас
Не существует функции добавления или добавления набора, однако вы можете просто собрать старые данные, объединить их в коде и заменить новые данные в локальном хранилище.
Что-то вроде этого:
function addToLocalStorage(nameOfItem, newData){
var oldData = localStorage.getItem(nameOfItem);
if(oldData !== null) {
localStorage.setItem(nameOfItem, oldData + newData);
} else {
localStorage.setItem(nameOfItem, newData);
}
}