我正在按角度进行布线,并且遇到了以下几方面的问题:
1)在我的app.component.ts
(这是被调用的第一个组件文件)中,我具有以下功能:
constructor(private router: Router, private route: ActivatedRoute){}
ngOnInit() {
if(this.authService.isUserAuthenticated()){
this.router.navigate([this.route]);
}
}
因此,在这里我正在检查用户是否已经登录,我正在重定向到当前路由。因此,如果我有一条类似http://localhost:4200/user/messages/5b43add9111d0c5e00430d08
的路由,并且用户刷新了页面,那么它将成功将其路由到正确的路由。但是,当我添加一个断点并检查this.route
的值时,我看到该路径为空(path=""
)。如果路径为空,则路由如何正常工作。我需要在此处进行基于条件的路由,并且由于路径为空,因此我无法应用条件。
2)我面临的另一个问题是授权令牌。我将令牌保存在localstorage中,并将其用于我的api调用。但是,当用户清除缓存时,令牌将被删除,我的应用程序将失败。是否有某种类型的侦听器可以用来检查清除本地存储的瞬间,我称为注销API?
修改 在第一种情况下,尽管尽管路径为空,但路由仍在发生,但我只是检查了控制台,却遇到以下错误:
Cannot read property 'path' of undefined
at createNewSegmentGroup (router.js:2531)
和
Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: '5b43add9111d0c5e00430d08'
Error: Cannot match any routes. URL Segment: '5b43add9111d0c5e00430d08'
如果遇到这些错误,页面如何正确路由?
答案 0 :(得分:0)
对于条件路由,您可以执行以下操作:基本上检查route.routeConfig.path而不是route
switch (route.routeConfig.path) {
case "your route configured path" :
// Ex: "admin", "reports"
this.router.navigate([this.route]);
}
对于#2 您应该实施路由激活。 示例:
@Injectable()
export class AuthActivateGuard implements CanActivate {
constructor(private authEventService: AuthEventService, private router: Router, private userRoleHelper: UserRoleHelper) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (window.location.hash) {
console.log('redirect sign in');
this.authEventService.redirectCallback();
}
return this.authEventService.getUser().map(user => {
if (user !== undefined && user !== null) {
... // Route since the user is active.
}
,并在路线中定义路线
{ path: 'reporting', component: SearchComponent, canActivate: [AuthActivateGuard] },