Guard только перенаправляет, если приложение уже открыто в браузере - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь использовать canActivate guard для проверки параметров URL, и если они не совпадают, то приложение должно перенаправлять. Пока у меня есть следующее:

@Injectable()

export class NodeInfoDetailGuard implements CanActivate {

    constructor(
        private _store: Store<NodeInfoRouteState>,
        private _router: Router,
    ) {}

    canActivate(route: ActivatedRouteSnapshot): Observable<boolean | UrlTree> {
        const {
            systemId,
            nodeName,
        } = route.params;

        const itemIsMatch = (item: ResourceResponseItem<NodeInfo>) =>
            item && item.payload.systemId === systemId && item.payload.nodeName === nodeName;

        // If nodeName or systemId not present, parses a string to a UrlTree
        if (!systemId || !nodeName) {
            return of(this._router.parseUrl('/node-info'));

        }
        // Otherwise, validate route parameters and check for match
        this._store.dispatch(new SelectNodeInfoAction({ systemId, nodeName }));
        return this._store.pipe(
            select(getNodeInfoSelectedItem),
            filter((item: ResourceResponseItem<NodeInfo>, index: number) => index >= 1 || itemIsMatch(item)),
            map(item => itemIsMatch(item) || this._router.parseUrl('/node-info')),
        );
    }
}

Это работает, если у меня уже запущено приложение в браузере, перенаправление не работает, если я использую вкладку fre sh. Приложение пытается отправить из хранилища, если имя узла или системный идентификатор не совпадают

...