Угловой получить маршрутизатор без сопоставленных параметров на конце навигации - PullRequest
0 голосов
/ 01 ноября 2019

В настоящее время я сталкиваюсь с проблемой angular, когда я подписываюсь на события маршрутизатора и пытаюсь получить URL без сопоставленных параметров. Причиной этого является то, что мы храним посещения страниц, но ради хранения у нас есть отношение, равное pages, и мы перешли к сохранению URL-адреса без параметров, поэтому у нас есть только одна запись, затем мы сохраняем параметры внутри другого поля. в базе данных.

Проблема, с которой я сталкиваюсь в настоящее время, и я видел ответы на этот вопрос, касающиеся использования routeConfig, но, поскольку я в настоящее время нахожусь в другом модуле / дочернем маршруте, внутри routePath всегда естьпустой строкой.

По сути, я надеюсь добиться, если у меня есть URL-адрес, такой как /products/1 Я хочу получить необработанный URL-адрес без параметров, поэтому он будет /products/:id.

this.router.events.subscribe((event: RouterEvent) => {
    // I need to get the url here without the params mapped.

    if (event instanceof NavigationEnd) {
        // Logic here to track.
    }
});

Также стоит отметить, что когда я ранее прослушивал ActivationEnd и нацелился на свойство firstChild на event.state, у него, похоже, не было ни полного URL-адреса, ни его свойства. не получил ни одного из параметров.

1 Ответ

0 голосов
/ 01 ноября 2019

Вы можете получить параметры из активированного маршрута.

constructor(private router: Router, route: ActivatedRoute) {  
  this.router.events.pipe(
        filter(event => event instanceof NavigationEnd)
    ).subscribe((event: NavigationEnd) => {
        // I need to get the url here without the params mapped.
        let url = event.url;
        const params = route.snapshot.params;
        const properties = Object.entries(params);
        properties.reverse();
        for (const p of properties) {
            url = url.substr(0, url.lastIndexOf('/'));
            url = `${url}/:${p[0]}`;
        }
        console.log(url);
    });
  }
...