Angular 2 - 从 localStorage 存储和获取对象数组

Angular 2 - Storing and Getting Objects array from localStorage

我想在 localStorage 中存储一个对象数组。

这是我在组件阶段存储对象数组的代码片段。

this._authenticationService.getProfilByLogin(this.form.value.j_username)
  .subscribe(result => {
     console.log('inside getting profils');
     console.log(result.json().ecomServices);
     localStorage.setItem('services_assigned', result.json().ecomServices);
  }, error => {

这是试图在另一个组件中取回它的代码。

import {Component, OnInit} from '@angular/core';
  import {EcomService} from "../../model/EcomService";

  @Component({
    selector: 'app-sidebar-nav',
    templateUrl: './sidebar-nav.component.html',
    styleUrls: ['./sidebar-nav.component.css']
  })
  export class SidebarNavComponent implements OnInit {


    public ecomServices: EcomService[] = [];

    constructor() {
    }

    ngOnInit() {
      this.ecomServices = localStorage.getItem('services_assigned');
    }
  }

这是我的模型class

export class EcomService {

  public eseCode: number;
  public eseLabel: string;

}

在本地存储中存储类似这样的东西

localStorage.setItem('services_assigned', JSON.stringify(this.ecomServices));

回来的时候做这样的事情。

this.ecomServices = JSON.parse(localStorage.getItem('services_assigned'));

Prathmesh 的回答的问题是,如果密钥 'services_assigned' 在 localStorage 中不存在,您将得到一个错误。

所以获取数组的最佳方式是:

this.ecomServices = JSON.parse(localStorage.getItem('services_assigned') || '[]');

请注意如果 getItem returns null 是如何提供默认值(空数组)的,因为我们从未将我们的服务存储在那里。

存储数组:

localStorage.setItem('services_assigned', JSON.stringify(this.ecomServices));

在我的项目中,我只是创建了与 localStorage 一起使用的存储服务:

@Injectable()
export class CacheService {

    constructor() {}

    public get(key) {
        const data = localStorage.getItem(key);
        return !_.isEmpty(data) ? _.cloneDeep(JSON.parse(data)) : [];
    }

    public set(data, key) {
        localStorage.setItem(key, JSON.stringify(data));
    }

    public reset() {
        localStorage.clear();
    }
}