在浏览器会话存储中我们有
`mykey` `myvalue`
其中mykey位于Session Storage部分的Key列中 和 其中myvalue位于“会话存储”部分的“值”列中 一切都很清楚。
ngStorage(一个AngularJS模块)在项目中实现并且工作正常 - 写入和读取由ngStorage编写的值。然而,它存储的价值不是
mykey myvalue
但是作为
ngStorage-mykey "myvalue"
(他做了两件不同的事情 - 添加前缀ngStorage-
并用#34;")包装myvalue。
问题是:如何通过另一个(不是AngularJS模块)保存的ngStorage读取会话值?
结果,$sessionStorage.mykey
根本没有得到myvalue
,而不是由ngStorage保存。
可以在没有黑客的情况下更改前缀ngStorage-以及其他任何内容,但另一个问题是""包装
那么,任何想法如何通过ngStorage读取由ngStorage设置的值(这意味着没有任何前缀前缀而不包含在"")
同样,默认情况下,如果您想通过$ sessionStorage.message =" Hello World&#34 ;;保存Hello World
文字。然后ngStorage默认添加前缀(可能会更改)并添加" "达到这样的价值:
ngStorage-message
"Hello World"
但我需要阅读
message
Hello World
任何想法如何做到这一点?
答案 0 :(得分:1)
默认情况下,ngStorage使用的序列化程序/ deSerializer是angular.toJson / angular.fromJson。这可以通过提供商进行配置。
angular.toJson会用“。
包装一个字符串注入$ sessionStorageProvider后,您可以在模块配置中执行此操作,
$sessionStorageProvider.setKeyPrefix('');
$sessionStorageProvider.setSerializer(mySerializer);
$sessionStorageProvider.setDeserializer(myDeserializer);
function mySerializer(obj) {
if(angular.isObject(obj)) {
return angular.toJson(obj);
}
return obj;
}
function myDeserializer(str) {
if(str && str.charAt(0) === '"') {
return angular.fromJson(str);
}
return str;
}