首页 文章

AngularDart路由:可选参数

提问于
浏览
1

是否可以在不设置辅助路由的情况下设置可选路由参数?我想 Build 一个非常简单的REST类型接口,其路径定义如下:

reports/:reportType/:reportId

导航到 reports/:reportType 将允许列出指定类型的所有已完成报告,并导航到完整路径将显示该特定报告 . 第一部分我工作正常,但我无法确定如何使最后一段可选 .

使用以下路由定义,仅在指定所有参数时调用enter方法:

void routesInit(Router router, RouteViewFactory view) {
  view.configure({
    'report' : ngRoute(
        // :rptId cannot be null (aka not provided)
        path: '/reports/:rptType/:rptId',
        enter: (RouteEnterEvent e) {
          print(e.parameters);
        })
  });
}

我已经尝试围绕 :rptId 的标准类型可选括号,例如父母 /reports/:rptType(/:rptId) 和方括号 /reports/:rptType(/:rptId) ,但无济于事 .

我也尝试过以下方法:

void routesInit(Router router, RouteViewFactory view) {
  view.configure({
    'report' : ngRoute(
        // :rptId cannot be null (aka not provided)
        path: '/reports/:rptType',
        enter: (RouteEnterEvent e) {
          print(e.parameters);
        },
        mount: {
          'report_type' : ngRoute(
            path: '/:rptId',
            enter: (RouteEnterEvent e) {
              print(e.parameters);
              print(e.route.parent.parameters);
          })
        })
  });
}

上面的问题是 reportreport_type 输入函数都被调用,因此我无法在那里正确设置视图,因为我需要在 report 路由的 enter 函数中进行某种检查以检测是否存在子路由,我不知道如何才能实现 .

是否有更简单的方法来指定可选参数,还是应该完全更改我想要用来缓解嵌套/子参数的路径? (E.G . :使用像 reports/type/:rptTypereports/single/:rptId 这样的东西)

1 回答

  • 1

    这种情况下的解决方案非常简单 . 我正在设计解决方案 . 简单的修复,只需使用两个顶级路线 .

    void routesInit(Router router, RouteViewFactory view) {
      view.configure({
        'report' : ngRoute(
            path: '/reports/:rptType',
            enter: (RouteEnterEvent e) {
              print(e.parameters);
          }),
        'report_id': ngRoute(
            path: '/reports/:rptType/:rptId',
            enter: (RouteEnterEvent e) {
              print(e.parameters);
            })
      });
    }
    

相关问题