9

我有以下设置:

   var admin = {
        name: 'admin',
        url: '/admin',
        views: {
            'menu': {
                templateUrl: '/Content/app/admin/partials/menu.html',
            },
            'content': {
                templateUrl: function (stateParams) {
                    var content = localStorage.getItem('ls.adminPage');
                    if (content != null && content != "") {
                        return '/Content/app/admin/partials/' + content + '.html';
                    }  else {
                        return '/Content/app/common/partials/empty.html';
                    }
                }
            }
        }
    };

    var adminContent = {
        name: 'admin.content',
        parent: 'admin',
        url: '/:content',
        views: {
            'content@': {
                templateUrl: function (stateParams) {
                    localStorage.setItem('ls.adminPage', stateParams.content);
                    return '/Content/app/admin/partials/' + stateParams.content + '.html';
                },
            }
        }
    }

发生的情况是,当用户以前访问过该/admin/xxx页面时,下一次/admin被选中时,它将再次返回该/admin/xxx页面。

但是从视觉上看,这是一团糟,因为浏览器 URL 显示为/admin并且状态设置不正确。

有什么方法可以存储一个子状态然后拥有它,以便当用户浏览到父级时,它将转换到最后一个已知的子状态并在浏览器中显示该 URL?

4

1 回答 1

4

做这个:

myapp.config(function($urlRouterProvider){

  $urlRouterProvider.when('/admin', function() {
    var content = localStorage.getItem('ls.adminpage');
    if ( content != null && content != "" ) {
      return "/admin/" + content;
    }
    else {
      return false;
    }
  });

});

看到这个 plunkr:http ://plnkr.co/edit/oEXZpO

编辑:两个月后重新访问这个答案,我意识到它的解释有点短(至少可以说):所以这实际上会将请求“重定向”到最后选择的管理页面,以便它显示在 URL 中。我更新了 Plunkr 并添加了一个显示当前文档 URL 的功能。因此可以看到,如果这是之前访问过的管理子页面,那么在单击 /admin/ 后,该 URL 实际上将是 /admin/12345。

于 2013-09-30T13:09:05.223 回答