成角度的路由和缓存问题,路由路径包含空字符串

时间:2018-07-10 14:55:46

标签: angular angular-routing

我正在按角度进行布线,并且遇到了以下几方面的问题:

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'

如果遇到这些错误,页面如何正确路由?

1 个答案:

答案 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]  },