Angular.Dart 和 Angular.JS 路由框架非常/根本不同。Angular.Dart 使用第三方路由框架(https://github.com/dart-lang/route/tree/experimental_hierarchical)并且仅实现 Angular 特定功能,例如ng-view
通过ViewFactory
.
所以你的问题真的属于route_hierarchical
包域。目前,您可以否决用户尝试离开路线,但我猜您希望根据用户是否登录来否决用户输入路线的能力。不幸的是,这尚不支持,但已在计划中。
您可以同时尝试创建一个自定义 viewFactory 包装器。
class RecipesRouteInitializer implements RouteInitializer {
void init(Router router, ViewFactory view) {
router
..addRoute(
name: 'login',
path: '/login',
enter: authView(router, view('login.html'), NOT_AUTH))
..addRoute(
name: 'register',
path: '/register',
enter: authView(router, view('register.html'), AUTH_NO_REG))
..addRoute(
name: 'home',
path: '/home',
enter: authView(router, view('home.html'), AUTH_AND_REG));
}
authView(Router router, ngView, mode) {
return (RouteEvent e) {
if (mode == AUTH_AND_REG) {
if (!authService.isAuth) {
router.go('login', {});
return;
}
if (!authService.isReg) {
router.go('register', {});
return;
}
} else if (mode == AUTH_NO_REG) {
if (!authService.isAuth) {
router.go('login', {});
return;
}
if (authService.isReg) {
router.go('home', {});
return;
}
} else if (mode == NOT_AUTH) {
if (authService.isAuth) {
router.go('register', {});
return;
}
}
ngView(e);
};
}
}
免责声明:这只是一个想法……可能完全行不通。