dart - 在 Angular Dart 中访问路由参数

标签 dart angular-dart

我有一个非常简单的路由案例,不涉及将 View 映射到路由。相反,我想解析路由/uri 并在我的 Controller 中设置某个变量的值。因此,例如,如果路由是 #/foo 我想设置一个值,如果是 #/bar 我想设置另一个值。

我没有执行此操作的简单模式。目前,我正在我的 Controller 中做这样的事情:

TodoController(this.http, this.scope, this.router) {
  router.onRouteStart.listen((RouteStartEvent event) {
    event.completed.then((result) {
      if (result) {
        if (event.uri == '/foo') {
          myVar = ...
        } else if (event.uri == '/bar') {
          myVar = ...
        } else {
          // ...
        }
      }
    });
  });
}

我觉得这是一种笨拙的方法,但我没有想出更好的方法。任何人都知道如何在我的 Controller 中监控路由变化?

最佳答案

你可以这样做:

bool isFoo = false;
bool isBar = false;
router.root
    ..addRoute(
        name: 'foo',
        path: '/foo',
        enter: (_) => isFoo = true,
        leave: (_) => isFoo = false)
    ..addRoute(
        name: 'bar',
        path: '/bar',
        enter: (_) => isBar = true,
        leave: (_) => isBar = false);

如果你想在稍后阶段监听路由变化,例如在组件/ Controller 内部,那么你可以这样做:

class MyController implements NgDetachAware {
  bool isFoo = false;
  bool isBar = false;

  RouteHandle fooHandle;
  RouteHandle barHandle;

  MyController(Router router) {
    fooHandle = router.root.getRouter('foo').newHandle();
    fooHandle.onEnter.listen((_) => isFoo = true);
    fooHandle.onLeave.listen((_) => isFoo = false);
    barHandle = router.root.getRouter('bar').newHandle();
    barHandle.onEnter.listen((_) => isBar = true);
    barHandle.onLeave.listen((_) => isBar = false);
  }

  detach() {
    fooHandle.discard();
    barHandle.discard();
  }
}

请注意,在此示例中,我使用了 RouteHandle,它可以帮助我们在 Controller 被销毁时清理所有监听器。

关于dart - 在 Angular Dart 中访问路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413538/

相关文章:

flutter - 如何在 flutter Dart 中从两个字符串生成一个字符串/哈希

dart - 在 Flutter 中关闭 showDialog 后如何运行代码?

javascript - 来自 JS 事件的 AngularDart CustomEvent 监听器

dart - dart-server/angulardart 和 CORS 的问题

flutter - 我该如何修复 “RangeError (index): Invalid value: Not in range 0..13, inclusive: 14”

flutter - Flutter:如何为StatefulWidget创建非最终属性?

android - 如何在 flutter 中生成条形码?

angular - 在Angular2 Dart中显示嵌套的子级子组件

dart - 尽管使用Dart 2.0,仍无法省略 'new'关键字

angularjs - Angular Dart 和表单验证