Сохранение данных в sessionStorage как неопределенное в angular - PullRequest
0 голосов
/ 19 марта 2020

Я сохраняю адресные данные в сессионном хранилище, но он показывает неопределенное место, где другие данные сохраняются нормально, и я также могу извлечь данные. Кто-нибудь может подсказать, в чем здесь проблема

helper service
 /**ENCRYPT the value */
  encryptValue(data: string) {
    if (data)
      return CryptoJS.AES.encrypt(data.trim(), environment.ENC_SECRET_KEY.trim());
  }

  /**DECRYPT the value */
  decryptValue(data: string) {
    if (data)
      return CryptoJS.AES.decrypt(data.trim(), environment.ENC_SECRET_KEY.trim()).toString(CryptoJS.enc.Utf8)
  }
login component
 /** store user INFO **/
  private _storeUserInfo(data) {
    sessionStorage.setItem("token", this.helper.encryptValue(data["access_token"].trim()));
    sessionStorage.setItem("mm-eml", this.helper.encryptValue(data["email"].trim()));
    sessionStorage.setItem("id", this.helper.encryptValue(data["id"]));
    sessionStorage.setItem("username", this.helper.encryptValue(data["username"]));
    sessionStorage.setItem("tenant_id", this.helper.encryptValue(data["tenant"]));
    sessionStorage.setItem("address",this.helper.encryptValue(data["address"]));
  }

я вызываю его в другом модуле

helper service

  /** DECRYPT the email */
  getEmail() {
    if (sessionStorage.getItem('mm-eml')) {
      return this.decryptValue(sessionStorage.getItem('mm-eml').trim());
    } else {
      return null;
    }
  };

  /** DECRYPT the user-id */
  getUserId() {
    if (sessionStorage.getItem('id')) {
      return this.decryptValue(sessionStorage.getItem('id'));
    } else {
      return null;
    }
  };

    /** DECRYPT the user-id */
    getUserName() {
      if (sessionStorage.getItem('username')) {
        return this.decryptValue(sessionStorage.getItem('username'));
      } else {
        return null;
      }
    };

  /** DECRYPT the tenant-id */
  getTenantId() {
    if (sessionStorage.getItem('tenant_id')) {
      return this.decryptValue(sessionStorage.getItem('tenant_id'));
    } else {
      return null;
    }
  };
 /** DECRYPT the location-address */
 getLocationAddress() {
  if (sessionStorage.getItem('address')) {
    return this.decryptValue(sessionStorage.getItem('address'));
  } else {
    return null;
  }
};

все хорошо, кроме адреса, который показывает неопределенный в хранилище сессии

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

Если address является JSON объектом, то вы должны сохранить его как строку:

sessionStorage.setItem("address", JSON.stringify(this.helper.encryptValue(data["address"])));

Чтобы получить его:

var addressObject = JSON.parse(sessionStorage.getItem(key));

Один пример:

const address = {"Line1":"ABC, Satara", "Pin":"415013"};

const addressStringToStore = JSON.stringify(address);
console.log(addressStringToStore.Line1);
// its undefined

const originalObject = JSON.parse(addressStringToStore);
console.log(originalObject.Line1);
// expected output: ABC, Satara
0 голосов
/ 20 марта 2020

У меня есть решение, в котором я неправильно привязал данные для хранения в хранилище сеанса.

0 голосов
/ 19 марта 2020

Например * Веб-хранилище , которое .getItem() возвращает null для неизвестного ключа.

Обратите внимание, однако, что .getItem() и .setItem() специально определены в IDL как будучи назначенными getter и setter для Storage интерфейса , и поэтому они также полностью поддерживают способы доступа к содержимому хранилища.

Однако [] синтаксис больше похож на обычный объект и / или свойство массива getter, и подобно этим возвращает undefined для неизвестного имени свойства.

Причина не использовать синтаксис [] состоит в том, что он будет сначала оперируйте свойствами объекта и, к счастью, сможете перезаписать реальные свойства и методы localStorage object, c .f:

Для Например:

> localStorage['address'] = function() { return 0 }
> localStorage.getItem('address')
0

Второй пример

В javascript вы всегда получаете значение undefined для ключей, которые не существуют внутри объекта.

a = {}; //new object
alert(a["address"]); // you get 'undefined' because "address" keys is not found

В localStorage .getItem - это метод, который проверяет ключи внутри объекта localStorage и возвращает * 10 40 * если не найден.

Не вините javascript, это просто localStorage объект поведение


под Хелпер Сервис поставил этот код

import { Injectable } from '@angular/core';
import * as CryptoJS from 'crypto-js';

@Injectable({
  providedIn: 'root'
})
export class LocalStorageService {

  constructor() {}
  createLocalStorage(key: string, value: any){
  console.log('value => '+value);
    var cryptoData : any = CryptoJS.AES.encrypt(value, 'encoded data');
    sessionStorage.setItem(key,cryptoData);
  }

  getLocalStorage(key){
    var encodeData = sessionStorage.getItem(key);
    if (encodeData) {
      var decodeData = CryptoJS.AES.decrypt(encodeData, 'encoded data').toString(CryptoJS.enc.Utf8);
      return decodeData;
    } else {
      return null;
    }
  }
}

и localalstorage setItem return undefined. Вы можете проверить здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...