如何为 ui-router 编写到最近父位置的通用 url 路由规则
How to write a common url routing rule to nearest parent location for ui-router
我正在使用 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);
});
您可以通过以下方式处理更复杂的重定向:
$urlRouterProvider.otherwise(function($injector, $location){
// handle each case here
});
我正在使用 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);
});
您可以通过以下方式处理更复杂的重定向:
$urlRouterProvider.otherwise(function($injector, $location){
// handle each case here
});