如何将公共URL路由规则写入ui-router的最近父位置

时间:2015-08-02 05:09:20

标签: angularjs redirect routes angular-ui-router rule

我正在使用ui-router作为Angular(1.4)WebApp。一切都很好,但URL重定向规则。我知道当URL未知时我可以定义一组重定向规则。但我想让它更先进。我想将请求重定向到最近的父位置。

这是一个简化的案例:

/                       // --> index.html
/apps/app/:id           // --> app.html
/apps/app/:id/status    // --> app.status.html
/unknown/path           // --> no path segment is registered at all, so redirect to index.html

MY WISH:
/apps/app/:id/unknown   // --> app.html (not redirect to index.html)

以下是相应的代码:

.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {

  $stateProvider
    .state('index', {
      url: '/',
      templateUrl: 'index.html'
    }).
    .state('app', {
      url: '/apps/app/:id',
      templateUrl: 'app.html'
    })
    .state('app.status', {
      url: '/apps/app/:id/status',
      templateUrl: 'app.status.html'
    });

  $urlRouterProvider.otherwise('/');

}])

在实际项目中,有20多个州规则。但重定向到index.html不是用户友好的。我正在寻找一种将页面重定向到最近页面的智能方法。

解决方案

现在我有了一个解决方案。请注意,_.initial来自underscorejs。

$urlRouterProvider
  .otherwise(function($injector, $location) {
    var parentUrl = _.initial($location.path().split('/')).join('/');
    $location.path(parentUrl);
  });

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式处理更复杂的重定向:

$urlRouterProvider.otherwise(function($injector, $location){
    // handle each case here
});

ui-router otherwise