Dart Angular 5路由器子redirectTo需要父参数

时间:2018-04-22 22:02:57

标签: angular-dart angular-dart-routing

我们需要将子路由重定向到另一个子路由并维护父路由参数。例如,将路线/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。这似乎排除了在儿童一级使用程序重定向。除了覆盖顶级路由器之外,还有其他解决方案吗?

1 个答案:

答案 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;
  }
}