Мне не удается перейти на ту же страницу, и я не уверен, чего здесь не хватает. Если я удаляю функцию setTimeout, она работает нормально, но не работает с setTimeout.
Можно ли как-нибудь задержать маршрутизацию?
{
path: 'sample-page',
component: SamplePageComponent,
canActivate: [SampleGuard]
}
Вот мой SamplePage, который просто использует сообщение из параметров маршрута. Файл html просто отображает сообщение.
SamplePage
import { Component, OnInit, OnDestroy } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { Subscription } from 'rxjs';
@Component({
selector: 'app-sample',
templateUrl: './sample-page.component.html',
styleUrls: ['./sample-page.component.scss']
})
export class SamplePageComponent implements OnInit, OnDestroy {
message: string;
routeParamsSubscription: Subscription;
constructor(private activatedRoute: ActivatedRoute, private router: Router) {
console.log(' in constructor');
}
ngOnInit(): void {
console.log('in in ng init');
this.routeParamsSubscription = this.activatedRoute.params.subscribe(params => {
this.message = params.message;
});
}
ngOnDestroy(): void {
this.routeParamsSubscription.unsubscribe();
}
}
SampleGuard Это просто переходит на ту же страницу 6 раз, а затем возвращает false.
import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class SampleGuard implements CanActivate {
static count = 0;
private readonly MAX_RETRY_COUNT = 6; // total 6 seconds
private readonly WAIT_TIME = 1000; // 1 sec
constructor(
private router: Router
) {}
canActivate(): boolean {
if (
SampleGuard.count <= this.MAX_RETRY_COUNT
) {
++SampleGuard.count;
setTimeout(() => {
this.router.navigate(['/sample-page', { message : 'message' + SampleGuard.count }]);
}, this.WAIT_TIME);
return true;
} else {
return false;
}
}
}
Заранее спасибо.