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

标签 javascript angularjs angularjs-routing angular-cookies

我定义了一个$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”的值或重命名属性 $$routeroute(或任何不以 $ 开头的内容)。

<小时/>

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

另请参阅此 short demo

<小时/>

我怀疑您实际上需要整个 $$route 对象,因此我建议您仅存储您感兴趣的属性(例如路径、pathParams 等)。

关于javascript - 从 cookie 存储中获取对象后属性消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23796597/

相关文章:

javascript onclick 计数器在刷新时初始化为 0

javascript - 在网页的移动 View 中隐藏div元素

angularjs - 将鼠标悬停在重复上并单击菜单 Protractor

angularjs - 跨源请求仅支持 HTTP

javascript - Angular UI-Router 和嵌套状态

javascript - 在 state.go (ui-router) 之后添加功能

javascript - jQuery 获取前一个元素未按预期工作

javascript - 使用 jQuery 显示和隐藏元素相关的 div

AngularJS - 注入(inject)值返回未知的提供者

javascript - FB.ui 共享对话框发布和取消具有相同的响应