我定义了一个$routeProvider
,它向路由添加了访问
:
$routeProvider.when('/tracks/:trackTitle/:mediaTitle',
{
templateUrl: 'views/track-detail.html',
controller: 'MediaCtrl',
access: access.user
...
}
我正在监听 $routeChangeStart
更改事件并检查用户是否可以访问该页面。如果没有,我会将路由保存在 cookiestore 中并在用户登录后加载它。
$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');
}});
问题在于 next
对象由于某种原因在 cookiestore 的 put 和 get 之间发生变化。
在 $cookieStore.put
之前,接下来是:
$$route: Object
params: Object
pathParams: Object
__proto__: Object
当我使用 $cookieStore.get
获取对象时,值是
params: Object
pathParams: Object
__proto__: Object
我得到的对象没有 $$route 对象。
这是为什么?我该如何解决?
最佳答案
发生这种情况是因为值在放入 cookie 存储之前已被 Angular 进行了“JSON 化”。
Angular 的 toJson()
方法会忽略任何以 $
开头的属性。
您可以使用 JSON.stringify()
(不是 Angular 的 toJson()
)来传递已经“JSONified”的值或重命名属性 $$route
到 route
(或任何不以 $
开头的内容)。
不幸的是,由于值是“JSON化的”,因此不可能存储所有类型的预属性。
例如。函数或不可 JSON 化的对象(窗口、范围、节点等)将不会被保留。
另请参阅此 short demo 。
<小时/>我怀疑您实际上需要整个 $$route
对象,因此我建议您仅存储您感兴趣的属性(例如路径、pathParams 等)。
关于javascript - 从 cookie 存储中获取对象后属性消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796597/