I defined a $routeProvider that adds access to the route:
$routeProvider.when('/tracks/:trackTitle/:mediaTitle',
{
templateUrl: 'views/track-detail.html',
controller: 'MediaCtrl',
access: access.user
...
}
I am listening to $routeChangeStart change event and check that the user can access the page. If the does not I save the route in the cookiestore and load it after the user logs in.
$rootScope.$on("$routeChangeStart", function (event, next, current) {
$rootScope.error = null;
if (!Auth.authorize(next.access)) {
if (!Auth.isLoggedIn())
$cookieStore.put('current.user.originalPath', originalPath);
$location.path('/signup');
}});
The problem is that the next object for some reason changes between the put and get from the cookiestore.
Before the $cookieStore.put next is:
$$route: Object
params: Object
pathParams: Object
__proto__: Object
And when I get the object using $cookieStore.get the value is
params: Object
pathParams: Object
__proto__: Object
I am getting the object without $$route object.
Why is that and how can I fix it?
This happens because values are "JSONified" by Angular before put into the cookie-store.
And Angular's
toJson()method ignores any properties that start with$. You could useJSON.stringify()(not Angular'stoJson()) to pass the value already "JSONified" or rename the property$$routetoroute(or anything that doesn't start with$).Unfortunately, since values are "JSONified" it is not possible to store all kinds of preperties.
E.g. functions or non-JSONifiable objects (window, scopes, nodes etc) won't be retained.
See, also, this short demo.
I doubt you actually need the whole
$$routeobject, so I suggest you store just the properties you are interested in (e.g. path, pathParams etc).