Dart Angular 5 router child redirectTo 需要 parent 参数

Dart Angular 5 router child redirectTo needs parent parameter

我们需要将一个 child 路由重定向到另一个 child 路由并维护一个 parent 路由参数。例如,将路由 /u/2/object/123 重定向到 /u/2/list。路由(对于这个简化示例)由 parent 和 child RouteDefinition 级别处理。 parent 定义为

RouteDefinition(path: 'u/:index', component: ...

child 会是

RouteDefinition(path: 'list', component: ...
RouteDefinition(path: 'object/:id', component: ...
RouteDefinition.redirect(path: '.*', redirectTo: 'u/:index/list')

运行 此 returns 错误 FormatException: :index 因此当前似乎不支持 redirectTo URL 中的参数。也不支持相对路由。

我们正在使用 Dart Angular 5,因此必须在任何路由器事件触发之前定义 RouteDefinitions 并将其提供给 router-outlet。这似乎排除了在 child 级别使用程序重定向。除了覆盖顶级路由器之外,还有其他解决方案吗?

我创建了一个仅在其 CanActivate 处理程序中重定向的组件。 child 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;
  }
}