Angular 7.3 как получить данные с маршрута - PullRequest
0 голосов
/ 08 января 2020

Я хочу передать текущий URL из файла app.routing.ts в guard , потому что существует проблема, по которой URL-адрес сбрасывается в Guard по какой-то причине. Ниже я добавил, как я передаю данные в маршрут.

const appRoutes: Routes = [
  {
    path: '',
    loadChildren: './plain-page.module#PlainPageModule',
    canActivate: [TravelplanTokenGuard],
    data: {'url': new URL(window.location.href)}
  },

Теперь мой вопрос: как я могу получить эти данные URL в моей охране с angular 7.3? Я пробовал несколько решений, таких как ActiveRoute решения ниже

canActivate() {
  this.route.data.subscribe(data => {
    console.log(data);
  });
}

или

const url = this.route.snapshot.data['url']

, но оба они, к сожалению, не работают для меня

РЕДАКТИРОВАТЬ: я пытаюсь получить эти данные в функции canActivate моего пользовательского guard

EDIT 2.0: я пробовал решение ниже, но журнал в .then () даже не запускается, прежде чем приложение перенаправляет на root маршрут

canActivate() {
  return new Promise((resolve) => {
    this.router.events.subscribe(event => {
      console.log(event)
      if (event instanceof NavigationEnd) {
        this.url = this.route.root.firstChild.snapshot.data['url'];
        resolve();
      }
    });
  }).then(() => {
    console.log('in de tokenguard', this.token)
    if (!this.jwtHelper.isTokenExpired(this.token)) {
      return true;
    }
    return false;
  });
}

1 Ответ

0 голосов
/ 08 января 2020

В вашем компоненте, где вы пытаетесь получить параметры: (Я только что обновил свой ответ)

constructor(router:Router, route:ActivatedRoute) {
    router.events
      .filter(e => e instanceof NavigationEnd)
      .forEach(e => {
        console.log(route.root.firstChild.snapshot.data['url']);
    });
}
...