Угловые куки, появляющиеся с закодированными символами

Учитывая некоторые данные:

$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 популярно, однако поставляется с собственным багажом, если вы хотите использовать значения на сервере.

Другие вопросы по тегам