Angular файлы cookie с кодированными символами

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

$scope.devices = [
  { name: 'iPhone 4', os: 'iOS'},
  { name: 'Nexus 7', os: 'Android'},
];

И функция для установки файла cookie:

$scope.saveDeviceChoice = function() {
  $cookieStore.put('savedDevice', $scope.deviceChoice.name);
}

Я получаю файл cookie со значением% 22Nexus %207% 22 вместо того, что я ожидал бы: Nexus 7.

Вот как это выглядит в веб-инспекторе http://cl.ly/image/420j150o1X3Q

Я действительно озадачен - кажется, что% 22 - это цитата, а %20 - это пробел, так как значение становится сохраненным "закодированным". Кто знает, что происходит?

Ответ 1

Вот официальный документ для $cookieStore:

Предоставляет хранилище ключа-значения (строковый объект), которое поддерживается файлами сеансов. Объекты, помещенные или извлеченные из этого хранилища, автоматически сериализуются или десериализуются с помощью angular toJson/fromJson.

Затем хранилище сохранит версию значения с URL-кодировкой. Взгляните на в этой статье, есть раздел, объясняющий кодировку cookie.

Ответ 2

$cookieStore. (get/put) автоматически запускается в/из Json по отправляемому вами значению, которое добавляет кодированные символы.

Если вам нужно просто использовать $cookies, вы можете уйти с настройкой своих параметров как таковых

$cookies['savedDevice'] = $scope.deviceChoice.name;

или

$cookies.savedDevice = $scope.deviceChoice.name;

В любом случае значения сохраняются так же, как вы хотите, чтобы они были.

Использование $cookieStore является популярным, однако поставляется с собственным багажом, если вы хотите использовать значения на сервере.