Angular 角度5路线后退
在我的应用程序路由模块中,我想将用户重定向到仪表板(如果已登录)或主页(如果未登录) 我用一个警卫来检查 来自应用程序路由.module.tsAngular 角度5路线后退,angular,Angular,在我的应用程序路由模块中,我想将用户重定向到仪表板(如果已登录)或主页(如果未登录) 我用一个警卫来检查 来自应用程序路由.module.ts class LoggedInUser implements CanActivate { constructor(@Inject(LoginService) private loginService: LoginService) {} canActivate() { return new Promise<boolean>((
class LoggedInUser implements CanActivate {
constructor(@Inject(LoginService) private loginService: LoginService) {}
canActivate() {
return new Promise<boolean>((resolve, reject) => {
this.loginService.isAuthenticated({
isLoggedIn(message: string, loggedIn: boolean) {
resolve(loggedIn);
}
});
});
}
}
const routes: Routes = [
{ path: '', loadChildren: 'app/dashboard/dashboard.module#DashboardModule', canActivate: [LoggedInUser] },
{ path: '**', loadChildren: 'app/homepage/homepage.module#HomepageModule' }
];
类LoggedInUser实现了CanActivate{
构造函数(@Inject(LoginService)private LoginService:LoginService){}
canActivate(){
返回新承诺((解决、拒绝)=>{
this.loginService.isAuthenticated({
isLoggedIn(消息:字符串,loggedIn:boolean){
解决(loggedIn);
}
});
});
}
}
常数路由:路由=[
{path:'',loadChildren:'app/dashboard/dashboard.module#DashboardModule',可以激活:[LoggedInUser]},
{路径:'**',loadChildren:'app/homepage/homepage.module#HomepageModule'}
];
这允许我在登录时访问仪表板,这是我想要的,但它不是将我重定向到主页
如何启用此回退?我已经搜索了几个小时,我所能找到的只是一些通过编程调用路由器的代码示例,以达到一个专用路径,如“/login”,但我不想要这样的路径。这可能会起到作用:确保您有一个默认的回家路径。我在你们的路线上看不到这一点,我认为这是不寻常的
{ path: '', redirectTo: 'home', pathMatch: 'full' }
另外设置您的回家路线:
path: 'home', (loadChildren if lazy loading, component if not, etc).
我可以肯定,在最近的一个项目中,我或多或少也遇到了同样的问题,这与你所期望的通常的防范措施是一样的 您可以使用路由器手动导航到登录页面,这是我脑海中的一个粗略想法:
class LoggedInUser implements CanActivate {
constructor(@Inject(LoginService) private loginService: LoginService, private router: Router) {}
canActivate() {
return new Promise<boolean>((resolve, reject) => {
this.loginService.isAuthenticated({
isLoggedIn(message: string, loggedIn: boolean) {
resolve(loggedIn);
}
});
}).then(loggedIn => {
if(!loggedIn) {
this.router.navigate['login'];
}
return loggedIn;
});
}
您需要使用
导航
,因为您的防护
正在返回真
或假
,只是禁止访问,它不能导航出去
@NikolaGavric感谢你提到我不能期望警卫导航出去。这解决了重定向问题,但如果强制我在我的主页的url后面加上/login,我不知道你的路线是如何构造的,您可以搜索有关处理相关路由的问题,也可以自己提问。将路由器重新导航逻辑放在路由器防护中真的有意义吗?我的意思是,路由器守卫的任务应该是简单地返回一个布尔值
,承诺
或可观察的
,不是吗?@MichaelCzechowski目前他们允许布尔值| urlTree
(更新答案),检查。如果您觉得这违反了单一责任,请在GitHub线程中随意发表评论。
import { Injectable } from '@angular/core';
import { CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
Router,
UrlTree } from '@angular/router';
@Injectable()
export class CanActivateRouteGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree {
const url = 'target';
const tree: UrlTree = this.router.parseUrl(url);
return tree;
}
}