从cookie存储中获取对象后,属性消失

时间:2014-05-22 01:50:56

标签: javascript angularjs angularjs-routing angular-cookies

我定义了一个$routeProvider,为路由添加access

$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对象的对象。

为什么会这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

这是因为值是" JSONified"在进入cookie商店之前由Angular提供 Angular的toJson()方法忽略以$开头的所有属性。 你可以使用JSON.stringify()(而不是Angular' s toJson())来传递价值" JSONified"或将属性$$route重命名为route(或任何不以$开头的内容。)


不幸的是,因为价值是" JSONified"不可能存储各种特性。
例如。函数或非JSONifiable对象(窗口,范围,节点等)不会被保留。

另请参阅此 short demo


我怀疑你确实需要整个$$route对象,所以我建议你只存储你感兴趣的属性(例如path,pathParams等)。