我有一个简单的路由案例,不涉及将视图映射到路由。相反,我想解析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 {
// ...
}
}
});
});
}
这让我觉得笨重,但我没有想出更好的东西。任何人都能更好地了解如何监控控制器中的路径变化?
答案 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
帮助我们在控制器被销毁时清除所有侦听器。