如何在 Angular 中使用本地存储

IT技术 javascript angular local-storage session-variables
2021-01-20 23:56:02

我需要在浏览器的会话中存储数据并检索数据,直到会话退出。你如何在 Angular 2 中使用本地和会话存储?

6个回答

标准localStorageAPI应该可用,只需执行例如:

localStorage.setItem('whatever', 'something');

得到了相当广泛的支持

请注意,如果您还没有它,则需要将其添加"dom""lib"数组中tsconfig.json

localStorage.getItem('key'); localStorage.setItem('key','value');
2021-03-23 23:56:02
我道歉。我不得不进入我的 ts.config 文件来修复它。“lib”:[“es2016”,“dom”]。您是否已经添加了“dom”?
2021-03-28 23:56:02
@Winnemucca 是的,这是由 CLI 设置的。我已将其添加到答案中。
2021-04-04 23:56:02
typescript很适合我。您是否找到了解决此问题的方法,而不必使用其他答案中列出的 npm?
2021-04-07 23:56:02
@Winnemucca “摔跤”不是一个有用的问题陈述。我不记得在 Angular CLI 包含的内容之外添加任何内容。
2021-04-07 23:56:02

如何从 localStorage 存储、检索和删除数据:

// General syntax for storing data
localStorage.setItem('key', 'value');
// Also note that both the key & the value has to be strings. 
// So we stringify the value(if it's an object) before setting it.

// So, if you have an object that you want to save, stringify it like this

let data = {
  'token': 'token',
  'name': 'name'
};
localStorage.setItem('myLSkey', JSON.stringify(data));

// OR for individual key-value pairs
localStorage.setItem('myLSkey', JSON.stringify({
  'token': 'token',
  'name': 'name'
}));

// To retrieve the data & save it to an existing variable
data = JSON.parse(localStorage.getItem('myLSkey'));

// To remove a value/item from localStorage
localStorage.removeItem("myLSkey");

提示
还可以为您的 angular 应用程序使用一个包,该包基于本机 localStorage API(我们在上面使用)来实现这一点,您不必担心字符串化和解析。查看此包以获取 angular 5 及更高版本。@ngx-pwa/local-storage

你也可以在谷歌上快速搜索一下angular local storage,并找到一个包含更多 Github 星等的包。

查看此页面以了解有关 Web Storage API 的更多信息。

我很高兴能帮上忙
2021-03-25 23:56:02
对于 Angular 8,您还可以查看这个更简单的包:npmjs.com/package/@cedx/ngx-webstorage
2021-03-25 23:56:02
感谢 JSON 解析技巧!
2021-04-04 23:56:02
我希望我能不止一次支持这个答案。我意识到由于我的值是一个布尔值,我需要对其进行字符串化以设置本地存储值。
2021-04-04 23:56:02

保存到本地存储:

localStorage.setItem('key', value);

对于具有属性的对象:

localStorage.setItem('key', JSON.stringify(object));

从本地存储获取:

localStorage.getItem('key');

对于对象:

JSON.parse(localStorage.getItem('key'));

localStorage 对象将数据保存为字符串并检索为字符串如果值是存储为字符串的对象,则需要解析所需的输出。例如parseInt(localStorage.getItem('key'));

最好使用框架提供的 localStroage 而不是 3rd 方库 localStorageService 或其他任何东西,因为它减少了您的项目大小。

这是一个简单服务的示例,它使用 localStorage 来持久化数据:

import { Injectable } from '@angular/core';

@Injectable()
export class PersistanceService {
  constructor() {}

  set(key: string, data: any): void {
    try {
      localStorage.setItem(key, JSON.stringify(data));
    } catch (e) {
      console.error('Error saving to localStorage', e);
    }
  }

  get(key: string) {
    try {
      return JSON.parse(localStorage.getItem(key));
    } catch (e) {
      console.error('Error getting data from localStorage', e);
      return null;
    }
  }
}

要使用此服务,请像往常一样在应用程序的某个module中提供它,例如在核心module中。然后像这样使用:

import { Injectable } from '@angular/core';

@Injectable()
export class SomeOtherService {

  constructor(private persister: PersistanceService) {}

  someMethod() {
    const myData = {foo: 'bar'};
    persister.set('SOME_KEY', myData);
  }

  someOtherMethod() {
    const myData = persister.get('SOME_KEY');
  }
}
太棒了!,刚刚制作了一个相同的示例脚本。网址:stackblitz.com/edit/...
2021-04-12 23:56:02

使用Angular2 @LocalStoragemodule,其描述为:

这个小小的 Angular2/typescript 装饰器使得使用 HTML5'LocalStorage 在你的指令(类属性)中自动保存和恢复变量状态变得非常容易。

如果你需要使用cookies,你应该看看:https : //www.npmjs.com/package/angular2-cookie

angular2-cookie 项目的继承者是 ngx-cookie npmjs.com/package/ngx-cookie
2021-03-29 23:56:02
目前没有人维护它。
2021-04-02 23:56:02
ngx-storeangular2-localstorage
2021-04-04 23:56:02