将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));