12

Given some data:

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

And a function to set a cookie:

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

I get a cookie with value %22Nexus%207%22 instead of what I would expect: Nexus 7.

This is what it looks like in the web inspector

I am truly puzzled - it seems that %22 is a quote and %20 is a space, somehow the value gets saved "encoded". Who knows what is going on?

Cœur
  • 37,241
  • 25
  • 195
  • 267
Wolfr
  • 5,055
  • 4
  • 25
  • 31

2 Answers2

7

Here is the official doc for $cookieStore:

Provides a key-value (string-object) storage, that is backed by session cookies. Objects put or retrieved from this storage are automatically serialized or deserialized by angular's toJson/fromJson.

Then the store save the URL encoded version of the value. Take a look at this article, there is a section explaining the cookie encoding.

Ye Liu
  • 8,946
  • 1
  • 38
  • 34
4

$cookieStore.(get/put) automatically run to/from Json on the value you send over, which appends the encoded characters.

If you were to just use $cookies then you can get away with setting your parameters as such

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

or

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

Either way, the values are saved just like you want em to be.

Usage of $cookieStore is popular, however comes with it's own baggage if you want to use the values on the server.

beauXjames
  • 8,222
  • 3
  • 49
  • 66