将sessionStorage中的数据保存为angular中未定义的数据

将sessionStorage中的数据保存为angular中未定义的数据,angular,typescript,Angular,Typescript,我将地址数据保存在会话存储中,但它会显示未定义的其他数据保存位置,并且我也可以检索数据。有人能建议这里有什么问题吗 helper service /**ENCRYPT the value */ encryptValue(data: string) { if (data) return CryptoJS.AES.encrypt(data.trim(), environment.ENC_SECRET_KEY.trim()); } /**DECRYPT the va

我将地址数据保存在会话存储中,但它会显示未定义的其他数据保存位置,并且我也可以检索数据。有人能建议这里有什么问题吗

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)
  }
我在另一个模块中调用它

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;
  }
};
除了在会话存储中显示未定义的地址(例如)之外,一切正常 对于未知键,
.getItem()
返回
null

但是请注意,
.getItem()
.setItem()
在IDL中被明确定义为
存储
接口
指定的
getter
setter
,因此它们也是完全受支持的访问存储内容的方式

但是,
[]
语法更类似于普通对象和/或数组属性
getter
,类似于那些返回未知属性名的
未定义的

不使用
[]
语法的原因是,它将首先对对象属性进行操作,并允许您覆盖
本地存储的实际属性和方法

例如:

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

第二个例子 在javascript中,对于对象中不存在的键,总是会得到一个
未定义的

a = {}; //new object
alert(a["address"]); // you get 'undefined' because "address" keys is not found
在localStorage
中.getItem
是一种方法,它检查
localStorage
对象内的键,如果未找到,则返回
null

不要责怪javascript,这只是
localStorage
对象的行为


在Helper服务下放置此代码

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;
    }
  }
}

和localstorage setItem返回未定义。

如果
地址是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(地址);
console.log(addressStringToStore.Line1);
//它没有定义
const originalObject=JSON.parse(addressStringToStore);
console.log(originalObject.Line1);

//预期输出:ABC,Satara
我得到了解决方案,我没有将数据正确绑定到会话存储中。

@kiran Mistry抱歉,我听不懂你说的话。因此,你要求从setItem中删除[]语法,如果我这样做了,我将得到未定义您正在使用
this.helper.encryptValue
来加密LocalStorages的值,并且因为您正在访问一个对象,这就是为什么您没有获得地址密钥@kiren Mistry helper是一个我使用encryptValue方法的服务。我知道helper是您的服务,在该服务中
encryptValue
是您的方法最好是存储字符串,我的意思是,如果您正在存储对象,那么在设置到会话存储之前将其字符串化
var addressObject = JSON.parse(sessionStorage.getItem(key));