通过 ngStorage AngularJS 从另一个库保存的 sessionStorage 中读取

Read from sessionStorage by ngStorage AngularJS that was saved by another library

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

`mykey` `myvalue`

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

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

mykey myvalue

但作为

ngStorage-mykey "myvalue"

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

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

因此,$sessionStorage.mykey 根本不会获得 myvalue 不是由 ngStorage 保存的内容。

可以不使用 hack 来更改前缀 ngStorage- 和任何其他内容,但另一个问题是“”包装器。

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

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

ngStorage-message "Hello World"

但我需要读书 messageHello World

知道怎么做吗?

默认情况下,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;
}