由另一个库

时间:2016-06-22 11:07:17

标签: javascript angularjs session session-storage ng-storage

在浏览器会话存储中我们有

`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

任何想法如何做到这一点?

1 个答案:

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