我们需要将子路由重定向到另一个子路由并维护父路由参数。例如,将路线/u/2/object/123
重定向到/u/2/list
。路由(对于此简化示例)由父级和子级RouteDefinition
级别处理。父定义将是
RouteDefinition(path: 'u/:index', component: ...
孩子将是
RouteDefinition(path: 'list', component: ...
RouteDefinition(path: 'object/:id', component: ...
RouteDefinition.redirect(path: '.*', redirectTo: 'u/:index/list')
运行此命令会返回错误FormatException: :index
,因此目前似乎不支持redirectTo网址中的参数。也不支持相对路线。
我们正在使用Dart Angular 5,因此必须先定义RouteDefinitions
并在任何路由器事件触发前将其提供给router-outlet
。这似乎排除了在儿童一级使用程序重定向。除了覆盖顶级路由器之外,还有其他解决方案吗?
答案 0 :(得分:0)
我创建了一个仅在其CanActivate
处理程序中重定向的组件。子RouteDefinition
使用的是组件而不是.redirect
:
new RouteDefinition(path: '.*', component: RedirectTo.RedirectToNgFactory),
我有RoutePath
个定义:
final user = new RoutePath(path: 'u/:index');
final list = new RoutePath(parent: user, path: 'list');
组件的CanActivate
处理程序被赋予路径路径和参数。它总是router.navigate
:
@Component(
selector: 'redirect-to',
template: '',
)
class RedirectTo implements CanActivate {
final Router router;
RedirectTo(this.router);
Future<bool> canActivate(RouterState current, RouterState next) async {
router.navigate( list.toUrl(parameters: next.parameters) );
return false;
}
}