Чтение из sessionStorage с помощью ngStorage AngularJS, которое было сохранено другой библиотекой
В хранилище сессии браузера мы имеем
`mykey` `myvalue`
где mykey находится в столбце Key раздела Session Storage, а myvalue находится в столбце Value раздела Session Storage Все ясно.
ngStorage (модуль AngularJS) реализован в проекте и отлично работает - записывает и читает значения, которые были записаны ngStorage. Однако это хранит ценность не как
mykey myvalue
но, как
ngStorage-mykey "myvalue"
(две разные вещи он делает - добавляет префикс ngStorage-
и переносит мое значение на "").
Вопрос в том, как прочитать значение сеанса с помощью ngStorage, которое было сохранено другим (не модулем AngularJS)?
В результате, $sessionStorage.mykey
не получит myvalue
при всем, что было сохранено не ngStorage.
Можно без взлома изменить префикс ngStorage - на что-нибудь еще, но другая проблема - это "" обертки.
Итак, есть ли идеи, как читать значения с помощью ngStorage, которые были установлены НЕ с помощью ngStorage (это означает, что без префикса префикса, а не "")?
Опять же, по умолчанию, если вы хотите сохранить Hello World
text by $sessionStorage.message = "Hello World"; тогда ngStorage добавит префикс по умолчанию (может быть изменен) и добавит "" к значению, как это:
ngStorage-message
"Hello World"
Но мне нужно прочитать message
Hello World
Есть идеи, как это сделать?
1 ответ
По умолчанию сериализатор / deSerializer, используемый 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;
}