Angular: получить значение параметра в родительском маршруте - PullRequest
1 голос
/ 29 марта 2019

У меня такие URL, как

  • www.yoursite.com/accounts/:accountid/info
  • www.yoursite.com/accounts/:accountid/users и т. Д.

Целочисленное значение accountid доступно в URL

.

Но не могу получить к нему доступ с помощью параметров ActivatedRoute.

Теперь я разделяю URL, чтобы получить accountid

Есть ли лучший способ получить доступ к значению, отличному от разделения URL?

Обновление

У меня есть другой модуль под названием account, который включает в себя все компоненты и службы для страниц, связанных с учетной записью.

Я лениво загружаю этот модуль. Таким образом, в маршрутизации корневого уровня, то есть app-routing я указываю

{ path:'account', loadChildren : './account/account.module#AccountModule' }

В модуле учета account-routing я указываю детей по

path: 'account/:accountid', component: AccountComponent, canActivate: [AuthGuard],
    children: [
      { path: '', redirectTo: 'info', pathMatch: 'full' },
      { path: 'info', component: InfoComponent },
      { path: 'users, component: UsersComponent }
      {path: '**', redirectTo: 'info'}
    ]

Примечание:

Мы можем получить доступ к параметрам в пути детей, если они есть. Но не родительской части, почему?

Я получаю undefined для параметров в родительском пути

Ответы [ 4 ]

3 голосов
/ 29 марта 2019

С помощью этой статьи проблема была решена.

Для доступа к params в родительском маршруте нам нужно использовать activeRoute.parent.paramsвместо activeRoute.params

this.activatedRoute.parent.params.subscribe(
    (params) => 
    { 
                 console.log(params.accountid); 
     });

Также из этого вопроса о стековом потоке было найдено решение сделать все параметры (включая параметры родительского маршрута) доступными для дочерних маршрутов..

Это делается путем включения объекта конфигурации с paramsInheritanceStrategy, установленным в always, куда мы импортируем RouterModule

например:

import {RouterModule, ExtraOptions} from "@angular/router";

export const routingConfiguration: ExtraOptions = {
  paramsInheritanceStrategy: 'always'
};

export const Routing = RouterModule.forRoot(routes, routingConfiguration);

Теперь мыможно получить доступ к параметрам родительского и дочернего маршрутов, используя activeRoute.params

3 голосов
/ 29 марта 2019

Попробуйте

создать объект ActivatedRoute в конструкторе

constructor(private route: ActivatedRoute) {}

, поэтому, как только объект будет создан, вы получите параметры маршрута, такие как

    let accountid = this.route.snapshot.params['accountid'];

    console.log(accountid);

ИЛИ

let accountid = this.activatedRoute.snapshot.paramMap.get('accountid');
console.log(accountid);

Надеюсь, это будет полезно.

1 голос
/ 29 марта 2019

Я думаю, что вам нужно получить доступ к текущим параметрам маршрута через следующий код в вашем конструкторе,

this.activeRoute.params.subscribe(params => {
     if(params['accountid']) {
         console.log(params['accountid'])  // use it where you need
     }
})
1 голос
/ 29 марта 2019

Попробуйте это решение:

 this.activatedRoute.params.subscribe(params => {
        const accountid= params['accountid'];
    });

Вы также можете попробовать это, если выше не работает.( Получил это решение отсюда )

this.router.parent.params.switchMap(params => {
  // params = { id: 1234 }
});
...