Angular 角度5路线后退

Angular 角度5路线后退,angular,Angular,在我的应用程序路由模块中,我想将用户重定向到仪表板(如果已登录)或主页(如果未登录) 我用一个警卫来检查 来自应用程序路由.module.ts class LoggedInUser implements CanActivate { constructor(@Inject(LoginService) private loginService: LoginService) {} canActivate() { return new Promise<boolean>((

在我的应用程序路由模块中,我想将用户重定向到仪表板(如果已登录)或主页(如果未登录)

我用一个警卫来检查

来自应用程序路由.module.ts

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