在Angular Dart中访问路径参数

时间:2014-03-14 18:58:48

标签: dart angular-dart

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

我没有这样做的简单模式。目前,我在我的控制器中做了类似的事情:

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 {
          // ...
        }
      }
    });
  });
}

这让我觉得笨重,但我没有想出更好的东西。任何人都能更好地了解如何监控控制器中的路径变化?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

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);

如果您想在稍后阶段收听路线更改,例如在组件/控制器内部,那么您可以这样做:

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帮助我们在控制器被销毁时清除所有侦听器。