Есть ли @ angular / router, эквивалентный transition.from () в ui-router? - PullRequest
0 голосов
/ 07 мая 2019

Я обновляю приложение Angular с ui-router до @angular/router (v6).


Есть функция, которая хочет найти предыдущий маршрут. Вот реализация с использованием Transition из ui-router/core

    const newFromName = this.transition.from().name;
    this.transition.params('from')

Я удалил большую часть функции, так как она не должна быть релевантной.

Мой вопрос:

Есть ли @angular/router эквивалент вышеупомянутым двум строкам?

Мы используем
"@uirouter/angular-hybrid": "3.1.7"
"@angular/router": "6.1.1",

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

Добавлено уточнение. Например, если бы я находился на другом маршруте до перехода к этому компоненту, например hello/world и затем перейдите к маршруту с этим кодом в my/new/route. Мне нужно знать значение /hello/world

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Способ 1. Создание службы

@Injectable()   
export class RouterState {
  private routeHistory = [];

  constructor(private router: Router) {
    // nothing to do
  }

  public startHistory() {
    this.router.events
      .pipe(filter(e => e instanceof NavigationEnd))
      .subscribe(newUrl => this.routeHistory = [...this.routeHistory, newUrl]);
  }

  public getRouteHistory() {
    return this.routeHistory;
  }
}

В компоненте приложения:

constructor(private routerState: RouterState) {
  this.routerState.startHistory();
}

В компоненте, в котором необходимо получить историю:

constructor(private routerState: RouterState) {}

yourFunction() {
  const allRoutes = this.routerState.getRouteHistory();
  const lastUrl = !!allRoutes.length 
    ?  allRoutes.slice(-2)
    :  '';
}
0 голосов
/ 07 мая 2019

Вы можете использовать это, и в // Exit Code у вас есть доступ к маршруту, с которого вы пришли

import { Router, NavigationStart, NavigationEnd } from '@angular/router';

...

constructor(router:Router) {
  router.events.subscribe(e => {
    if(e instanceof NavigationStart) {
      // Init Code
    }

    if(e instanceof NavigationEnd) {
      // Exit Code
    }
  }
});
...