0

我定义了一个$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 对象的对象。

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

4

1 回答 1

1

发生这种情况是因为值在放入 cookie 存储之前由 Angular “JSON 化”。
Angular 的toJson()方法会忽略任何以$. 您可以使用JSON.stringify()(不是 Angular 的toJson())传递已经“JSONified”的值或将属性重命名$$routeroute(或任何不以 开头的$)。


不幸的是,由于值是“JSON 化的”,因此不可能存储所有类型的属性。
例如,函数或非 JSON 对象(窗口、范围、节点等)将不会被保留。

另请参阅这个简短的演示


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

于 2014-05-22T08:03:16.757 回答