如何更新 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);
我遇到了缓存对象与正确数据不相似的问题,所以我想我可以将最新版本推送到浏览器缓存,这将解决我的问题。
如何使用新对象更新 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);