【问题标题】:Dart Angular 5 router child redirectTo needs parent parameterDart Angular 5路由器子redirectTo需要父参数
【发布时间】:2018-10-02 21:55:44
【问题描述】:

我们需要将一个子路由重定向到另一个子路由并维护一个父路由参数。例如将路由/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 URL 中的参数。也不支持相对路由。

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

【问题讨论】:

    标签: angular-dart angular-dart-routing


    【解决方案1】:

    我创建了一个仅在其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;
      }
    }
    

    【讨论】:

    • 我在我的应用程序中部署了一个类似的登录和注销目的地机制......虽然不明显,但已证明是一种可靠的重定向方式。
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 2019-09-15
    • 2017-01-25
    • 2016-11-25
    • 1970-01-01
    • 2018-08-10
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多