我有一个非常简单的路由案例,不涉及将 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/