Угловые куки, появляющиеся с закодированными символами
Учитывая некоторые данные:
$scope.devices = [
{ name: 'iPhone 4', os: 'iOS'},
{ name: 'Nexus 7', os: 'Android'},
];
И функция для установки куки:
$scope.saveDeviceChoice = function() {
$cookieStore.put('savedDevice', $scope.deviceChoice.name);
}
Я получаю печенье со значением%22Nexus%207%22 вместо того, что я ожидаю: Nexus 7.
Вот как это выглядит в веб-инспекторе
https://d3vv6lp55qjaqc.cloudfront.net/items/1X3W150q3T0i3e3J1e29/Screen%20Shot%202013-06-10%20at%2017.53.32.png?X-CloudApp-Visitor-Id=695722fcc5cecec10f09e16181dbdf5f&v=2d164c6a
Я действительно озадачен - кажется, что% 22 - это кавычка, а% 20 - это пробел, как-то значение сохраняется как "закодированное". Кто знает, что происходит?
2 ответа
Вот официальный документ для $cookieStore:
Предоставляет хранилище ключ-значение (строковый объект), которое поддерживается cookie-файлами сеанса. Объекты, помещенные или извлеченные из этого хранилища, автоматически сериализуются или десериализуются с помощью функции angular toJson/fromJson.
Затем в магазине сохраняют URL-адрес закодированной версии значения. Взгляните на эту статью, там есть раздел, объясняющий кодировку cookie.
$cookieStore.(get/put) автоматически запускается в / из Json для значения, которое вы отправляете, к которому добавляются закодированные символы.
Если бы вы просто использовали $ cookies, то вы можете избежать установки параметров как таковых
$cookies['savedDevice'] = $scope.deviceChoice.name;
или же
$cookies.savedDevice = $scope.deviceChoice.name;
В любом случае значения сохраняются так, как вы хотите, чтобы они были.
Использование $ cookieStore популярно, однако поставляется с собственным багажом, если вы хотите использовать значения на сервере.