javascript - ngStorage AngularJS 从 sessionStorage 读取由另一个库保存的内容

标签 javascript angularjs session session-storage ng-storage

在浏览器 session 存储中我们有

`mykey` `myvalue`

其中 mykey 位于 session 存储部分的 Key 列中 和 其中 myvalue 位于 session 存储部分的值列中 一切都清楚了。

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

mykey myvalue

但是作为

ngStorage-mykey "myvalue"

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

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

因此,$sessionStorage.mykey 根本无法获取不是由 ngStorage 保存的 myvalue

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

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

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

ngStorage-message “Hello World”

但我需要阅读 消息 Hello World

有什么想法可以做到这一点吗?

最佳答案

默认情况下,ngStorage 使用的序列化器/反序列化器是 Angular.toJson/Angular.fromJson。这可以通过提供商进行配置。

angular.toJson 会用“.”包裹一个字符串

您可以在注入(inject) $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;
}

关于javascript - ngStorage AngularJS 从 sessionStorage 读取由另一个库保存的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37966221/

相关文章:

javascript - 如何检查变量是否已经在AngularJS中被监视?

javascript - 如何使用 angularJS $broadcast 将对象数据作为值(而不是引用)传递

php - $_SESSION 数组的安全性

javascript - 第二个 php 文件找不到在第一个文件中启动的 session

php - 如何用php和Codeigniter存储搜索条件?

javascript - JS 串联

javascript - Node.js、Jsdom、HttpAgent 的内存使用情况

javascript - 拉斐尔演示饼图调整以添加自定义颜色

javascript:仅在检测到 "return false"时才执行 onsubmit

javascript - 对单元格值进行 Angular 网格验证