0

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

`mykey` `myvalue`

其中 mykey 在 Session Storage 部分的 Key 列中,而 myvalue 在 Session Storage 部分的 Value 列中 一切都清楚了。

ngStorage(一个 AngularJS 模块)在项目中实现并且工作正常 - 写入和读取由 ngStorage 写入的值。然而,它存储的价值不是

mykey myvalue

但作为

ngStorage-mykey "myvalue"

(他做了两件不同的事情——添加前缀ngStorage-并用“”包装 myvalue)。

问题是:如何通过 ngStorage 读取由另一个(不是 AngularJS 模块)保存的会话值?

结果,$sessionStorage.mykey根本不会得到myvalue不是由 ngStorage 保存的。

无需 hack 就可以将前缀 ngStorage- 更改为其他任何东西,但另一个问题是“”包装器。

那么,任何想法如何通过 ngStorage 读取不是由 ngStorage 设置的值(这意味着没有任何前缀前缀并且没有被 "" 包装)?

同样,默认情况下,如果您想Hello World通过 $sessionStorage.message = "Hello World"; 保存文本 然后 ngStorage 将默认添加前缀(可能会更改)并将“”添加到值中,如下所示:

ngStorage-message "Hello World"

但我需要阅读 message Hello World

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

4

1 回答 1

1

默认情况下,ngStorage 使用的序列化器/反序列化器是 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;
}
于 2016-06-22T11:29:37.560 回答