Запретить маршрутизацию на дополнительный вид, если обновление страницы в Angular переходит в рекурсию

Я разрабатываю код "Предотвращение маршрутизации во вторичное представление при обновлении страницы в Angular" из: https://www.bennadel.com/blog/3368-prevent-routing-to-secondary-view-if-page-refresh-in-angular-5-0-0.htm

Я разработал код ниже, но код переходит в рекурсию, и тот же Guard продолжает выполняться в рекурсии.

@Injectable()
export class DirectAccessGuard implements CanActivate {
    path: ActivatedRouteSnapshot[];
    route: ActivatedRouteSnapshot;
    constructor(private router: Router) { }

    canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

        if (this.router.url === '/' && !this.isPageRefresh()) {
            this.router.navigate(['TOMainLandingPage']);
            return false;
        }
        if (this.isPageRefresh()) {
            this.router.navigateByUrl(this.getUrlWithoutSecondary(state));
            return false;
        }
        return true;
    }

    // I determine if the current route-request is part of a page refresh.
    private isPageRefresh(): boolean {
        return (!this.router.navigated);
    }

    private getUrlWithoutSecondary(routerStateSnapshot: RouterStateSnapshot): UrlTree {
        var urlTree = this.router.parseUrl(routerStateSnapshot.url);
        var segment = urlTree.root;

        while (segment && segment.children) {
            delete (segment.children.secondary);
            segment = segment.children[PRIMARY_OUTLET];
        }
        return (urlTree);
    }
}

Примечание. Я хочу остановиться, если пользователь вручную вводит несуществующие маршруты и обновляет страницу с правильным маршрутом?

0 ответов

Другие вопросы по тегам