如何更新 localStorage 项目?

How do I update localStorage items?

我遇到了缓存对象与正确数据不相似的问题,所以我想我可以将最新版本推送到浏览器缓存,这将解决我的问题。

如何使用新对象更新 localStorage?因此,如果我有一个控制器,它会更新评估。我怎样才能将该评估对象推送到 localStorage?

如果对象是 JSON 格式(不确定 Angular 是否使用不同的格式),您可能可以使用 setItem()getItem() 方法来更新和检索本地存储项目!

例如取自以下post: http://thejackalofjavascript.com/storing-objects-html5-local-storage/

var me = {name:'myname',age:99,gender:'myGender'};
localStorage.setItem("user",me);
//fetch object
console.log(localStorage.getItem("user")); // will return "[object Object]"

要使用本机 JavaScript 做到这一点,您可以这样做:

localStorage.setItem('itemKey', JSON.stringify(yourObject));
var item = JSON.parse(localStorage.getItem('itemKey'));

在 angular 的上下文中,您应该将 localStorage 服务作为 localStorage 的包装器并将其注入您的服务或控制器。或者您可以注入 $window 并直接使用它,例如:$window.localStorage

您可以使用全功能 Angular 模块 angular-local-storage

An AngularJS module that gives you access to the browsers local storage with cookie fallback

设置

myApp.controller('MainCtrl', function($scope, localStorageService) {
  //...
  function submit(key, val) {
   return localStorageService.set(key, val);
  }
  //...
});

获取

myApp.controller('MainCtrl', function($scope, localStorageService) {
  //...
  function getItem(key) {
   return localStorageService.get(key);
  }
  //...
});

setItem 不会工作,而是会在 localStorage 中创建另一个同名的项目

而是直接使用

localStorage.item =(无论你想要什么改变)

专门针对提问者的回复:

LocalStorage 只能存储字符串,这就是您在存储对象之前将其字符串化的原因。要将存储的字符串作为对象进行操作,您可以将其传递给 JSON.parse(假设它的 JSON 格式正确)。然后要存储修改后的版本,需要将其转换回字符串。

// Creates JSON-formatted object, converts it to a string and stores the string as "ship"
const ship = { name: "black pearl", captain: "Jack Sparrow" };
const originalStringifiedForStorgage = JSON.stringify(ship);
localStorage.setItem("ship", JSON.stringify(ship));

// Retrieves the string and converts it to a JavaScript object 
const retrievedString = localStorage.getItem("ship");
const parsedObject = JSON.parse(retrievedString);

// Modifies the object, converts it to a string and replaces the existing `ship` in LocalStorage
parsedObject.name = "newName";
const modifiedndstrigifiedForStorage = JSON.stringify(parsedObject);
localStorage.setItem("ship", strigifiedForStorage);