当我仅使用ui-router查看父状态时,如何自动转到上次选择的子状态?

9 angularjs angular-ui angular-ui-router

我有以下设置:

   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';
                },
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

发生的情况是,当用户先前已经访问该/admin/xxx页面时,下一次/admin选择它将再次返回该/admin/xxx页面.

但是在视觉上这是一个混乱,因为浏览器URL显示为/admin并且状态未正确设置.

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

Jul*_*lzt 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;
    }
  });

});
Run Code Online (Sandbox Code Playgroud)

请参阅此plunkr:http://plnkr.co/edit/oEXZpO

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