Angular 5 получает URL из State: RouterStateSnapshot при открытии, нажав на URL в чате, почте или так же - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь перейти на запрошенный (открытый) URL после запрошенного входа в систему.Мой auth-guard.service.ts не работает.Для этого кода он работает нормально, если я наберу URL в браузере, чем нажать Enter.Но если я нажму (перейду) URL-адрес, щелкнув по нему с другой веб-страницы или из какого-либо чата, то у state.url будет только /.Может ли кто-нибудь помочь мне получить state.url в случае, если я перейду к запрашиваемому URl, щелкнув по URL-адресу из какого-либо места?

import { Injectable } from '@angular/core';
import { CanActivate, CanActivateChild, Router, ActivatedRoute,        
ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from './auth.service'

@Injectable()
export class AuthGuard implements CanActivate, CanActivateChild {

constructor(
    private router: Router,
    private authService: AuthService,
    private activatedRoute: ActivatedRoute
) { }

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
    //Get URL from State
    let url: string = state.url;
    alert("Url catched from state: " + url);
    this.checkLogin(url);

    return new Observable<boolean>(
        result => {
            result.next(true);
        }
    );
}

canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
    return this.canActivate(route, state);
}

checkLogin(url: string): void {
    if (this.authService._isLoggedIn) {
        return;
    }     

    this.authService.redirectUrl = url;
    this.router.navigate(['/login']);        
}
...