web-dev-qa-db-ja.com

ローカルストトレージ Angular 2

ブラウザのセッションにデータを保存し、セッションが終了するまでデータを取得する必要があります。 Angular 2でローカルおよびセッションストレージをどのように使用しますか?

117
Jaya Kumar B A

標準の localStorage API が利用可能であるべきです。

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

それは かなり広くサポートされている

まだ持っていない場合は、"dom""lib"配列にtsconfig.jsonを追加する必要があります。

118
jonrsharpe

データをローカルストレージに保存するには、

localStorage.setItem('key', 'value');

たとえばオブジェクトがある場合は、必ず値を文字列化してください。
localStorage.setItem(itemName, JSON.stringify(itemData));

個々のキーと値のペアに対してOR
localStorage.setItem('currentUser', JSON.stringify({ token: token, name: name }));

そしてlocalstorageからデータを取得する
user = JSON.parse(localStorage.getItem(currentUser));

edit:これを実現するためにネイティブのlocalStoreage api(上記で使用しているもの)をベースにしたパッケージを使用することもできますし、stringifyやparseを心配する必要はありません。角度5以上でこのパッケージをチェックしてください。 @ ngx-pwa/local-storage

62
Junaid

LocalStorageに保存します。

localStorage.setItem('key', value);

プロパティを持つオブジェクトの場合:

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

ローカルストレージから取得:

localStorage.getItem('key');

オブジェクトの場合

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

localStorageオブジェクトはデータを文字列として保存し、文字列として取得します 。値が文字列として格納されているオブジェクトの場合は、目的の出力を解析する必要があります。例えばparseInt(localStorage.getItem('key'));

サードパーティのライブラリlocalStorageServiceやその他のものではなく、localStroageで提供されているフレームワークを使用することをお勧めします。プロジェクトサイズが小さくなるからです。

30

Angular2 @LocalStorage moduleを使用します。

この小さなAngular 2/TypeScriptデコレータは、HTML 5のLocalStorageを使用して、ディレクティブ(クラスプロパティ)内の変数の状態を自動的に保存および復元することを非常に簡単にします。

クッキーを使用する必要がある場合は、次のページをご覧ください。 https://www.npmjs.com/package/angular2-cookie

14
ebu_sho

これは、データを永続化するために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;
    }
  }
}

このサービスを使用するには、通常どおり、アプリ内のモジュール、たとえばコアモジュールで提供します。その後、このように使用してください:

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');
  }
}
13
Hinrich

ローカルストレージ設定項目

構文:

  localStorage.setItem(key,value);
  localStorage.getItem(key);

例:

  localStorage.setItem("name","Muthu");
  if(localStorage){   //it checks browser support local storage or not
    let Name=localStorage.getItem("name");
    if(Name!=null){  //  it checks values here or not to the variable
       //do some stuff here...
    }
  }

またあなたが使用することができます

    localStorage.setItem("name", JSON.stringify("Muthu"));

セッションストレージ設定項目

構文:

  sessionStorage.setItem(key,value);
  sessionStorage.getItem(key);

例:

  sessionStorage.setItem("name","Muthu");

  if(sessionStorage){ //it checks browser support session storage/not
    let Name=sessionStorage.getItem("name");

    if(Name!=null){  //  it checks values here or not to the variable
       //do some stuff here...
    }
  }

またあなたが使用することができます

   sessionStorage.setItem("name", JSON.stringify("Muthu"));

データの保存と取得が簡単

7

上記のように、localStorageService.set('key', 'value');localStorageService.get('key');であるべきです。

5
user2521059

私が管理しているライブラリの使用も検討できます。ngx-storenpm i ngx-store

LocalStorage、sessionStorage、cookieの操作は非常に簡単です。データを操作するためにサポートされているメソッドがいくつかあります。

1) デコレータ:

export class SomeComponent {
  @LocalStorage() items: Array<string> = [];

  addItem(item: string) {
    this.items.Push(item);
    console.log('current items:', this.items);
    // and that's all: parsing and saving is made by the lib in the background 
  }
}

デコレータによって格納された変数は、異なるクラス間で共有することもできます。そのために設計された@TempStorage()(エイリアス@SharedStorage()))デコレータもあります。

2) 簡単なサービス方法:

export class SomeComponent {
  constructor(localStorageService: LocalStorageService) {}

  public saveSettings(settings: SettingsInterface) {
    this.localStorageService.set('settings', settings);
  }

  public clearStorage() {
    this.localStorageService.utility
      .forEach((value, key) => console.log('clearing ', key));
    this.localStorageService.clear();
  }
}

3) ビルダーパターン:

interface ModuleSettings {
    viewType?: string;
    notificationsCount: number;
    displayName: string;
}

class ModuleService {
    constructor(public localStorageService: LocalStorageService) {}

    public get settings(): NgxResource<ModuleSettings> {
        return this.localStorageService
            .load(`userSettings`)
            .setPath(`modules`)
            .setDefaultValue({}) // we have to set {} as default value, because numeric `moduleId` would create an array 
            .appendPath(this.moduleId)
            .setDefaultValue({});
    }

    public saveModuleSettings(settings: ModuleSettings) {
        this.settings.save(settings);
    }

    public updateModuleSettings(settings: Partial<ModuleSettings>) {
        this.settings.update(settings);
    }
}

もう一つの重要なことはあなたが(すべての)ストレージの変更を聞くことができるということです。 (以下のコードはRxJS v5の構文を使用しています):

this.localStorageService.observe()
  .filter(event => !event.isInternal)
  .subscribe((event) => {
    // events here are equal like would be in:
    // window.addEventListener('storage', (event) => {});
    // excluding sessionStorage events
    // and event.type will be set to 'localStorage' (instead of 'storage')
  });

WebStorageService.observe()は通常のObservableを返すので、Zip、フィルタ、バウンスなどができます。

私はいつもこのライブラリーとそのドキュメンテーションを改良するのを手伝ってくれる提案や質問に耳を傾けています。

5
Daniel Kucal

LocalStorageはデータの設定と受信に簡単に使用できます。

注: Angular 2とAngular 4の両方で機能します。

//set the data
localStorage.setItem(key, value);   //syntax example
localStorage.setItem('tokenKey', response.json().token);

//get the data
localStorage.getItem('tokenKey')

//confirm if token is exist or not
return localStorage.getItem('tokenKey') != null;
4
Rahul Mangal

本当に優雅な解決策はデコレータです。それらを使用して、保存したい変数をマークすることができます。

export class SomeComponent {

  @LocalStorage
  public variableToBeStored: string;

}

それを達成する方法の例はこの記事(私のブログ)にあります

2
Filip Molcik

項目またはオブジェクトをローカルストレージに設定するには

   localStorage.setItem('yourKey', 'yourValue');

アイテムまたはオブジェクトをローカルストレージに入れるには、キーを覚えておく必要があります。

   let yourVariable = localStorage.getItem('yourKey');

ローカルストレージから削除するには

   localStorage.removeItem('yourKey');
1
Sopyan Mulyana

"angular-2-local-storage"をインストール

import { LocalStorageService } from 'angular-2-local-storage';
1
user1349544

Cyrilletuziの LocalStorage Asynchronous Angular 2+ Service を使用できます。

インストール:

$ npm install --save @ngx-pwa/local-storage

使用法:

// your.service.ts
import { LocalStorage } from '@ngx-pwa/local-storage';

@Injectable()
export class YourService {
   constructor(private localStorage: LocalStorage) { }
}

// Syntax
this.localStorage
    .setItem('user', { firstName:'Henri', lastName:'Bergson' })
    .subscribe( () => {} );

this.localStorage
    .getItem<User>('user')
    .subscribe( (user) => { alert(user.firstName); /*should be 'Henri'*/ } );

this.localStorage
    .removeItem('user')
    .subscribe( () => {} );

// Simplified syntax
this.localStorage.setItemSubscribe('user', { firstName:'Henri', lastName:'Bergson' });
this.localStorage.removeItemSubscribe('user');

詳細はこちら:

https://www.npmjs.com/package/@ngx-pwa/local-storage
https://github.com/cyrilletuzi/angular-async-local-storage

1
JavierFuentes

設定項目の構文は次のとおりです。

localStorage.setItem(key,value);

Get itemの構文は次のとおりです。

localStorage.getItem(key); 

この例は次のとおりです。

localStorage.setItem('email','[email protected]');
    let mail = localStorage.getItem("email");
    if(mail){ 
       console.log('your email id is', mail);
    }
  }
0
WapShivam

次のサービスを使用して、angularプロジェクトのlocalStorageおよびsessionStorageで作業できます。このサービスをコンポーネント、サービスに注入し、...

コアモジュールにサービスを登録することを忘れないでください。

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

@Injectable()
export class BrowserStorageService {

  getSession(key: string): any {
    const data = window.sessionStorage.getItem(key);
    if (data) {
      return JSON.parse(data);
    } else {
      return null;
    }
  }

  setSession(key: string, value: any): void {
    const data = value === undefined ? '' : JSON.stringify(value);
    window.sessionStorage.setItem(key, data);
  }

  removeSession(key: string): void {
    window.sessionStorage.removeItem(key);
  }

  removeAllSessions(): void {
    for (const key in window.sessionStorage) {
      if (window.sessionStorage.hasOwnProperty(key)) {
        this.removeSession(key);
      }
    }
  }

  getLocal(key: string): any {
    const data = window.localStorage.getItem(key);
    if (data) {
      return JSON.parse(data);
    } else {
      return null;
    }
  }

  setLocal(key: string, value: any): void {
    const data = value === undefined ? '' : JSON.stringify(value);
    window.localStorage.setItem(key, data);
  }

  removeLocal(key: string): void {
    window.localStorage.removeItem(key);
  }

  removeAllLocals(): void {
    for (const key in window.localStorage) {
      if (window.localStorage.hasOwnProperty(key)) {
        this.removeLocal(key);
      }
    }
  }
}
0
AbolfazlR

インストール

npm install --save @ngx-pwa/local-storage

まず、「angular-2-local-storage」をインストールする必要があります

import { LocalStorageService } from 'angular-2-local-storage';

LocalStorageに保存します。

localStorage.setItem('key', value);

ローカルストレージから取得:

localStorage.getItem('key');
0
Dimuthu