У меня есть настройка маршрутизации, как это
{
path: '',
component: BaseCmp,
children: [
{ path: 'list', component: ListCmp },
{
path: 'list/:itemId',
component: ListItemCmp,
},
{
path: 'list/:itemId/:subNavItemId',
component: ListItemCmp,
}
]
}
Я выбираю элемент из ListCmp и перехожу, например, к «списку/123».
В конструкторе ListCmp/OnInit я извлекаю некоторые данные с помощью :itemId, и он возвращает список SubNavItems, из которого в качестве параметров следует добавить идентификатор первого SubNavItem (для выделения routerLinkActive и других целей выборки).
constructor(route:ActivatedRoute, http:HttpClient, router:Router){
let id = route.params.itemId
http.get(.../id).subscribe(list => {
// add id of first item of list to params
this.router.navigate(['list', id, list[0].id, {replaceUrl:true}]
})
}
Это приведет к уничтожению текущего ListItemCmp и созданию нового экземпляра ListItemCmp. Как я могу предотвратить это? Я попробовал метод location.go(), но он не активирует routerLinkActive.
'list/:itemId/:subNavItemId'
должен быть потомком'list/:itemId'
: из-за этого ваша маршрутизация создает два экземпляра одного и того же класса, но должна уничтожить их, чтобы перейти к URL-адресу. Сделайте его дочерним по отношению к первому маршруту, тогда ваш компонент больше не должен уничтожаться. - person   schedule 21.11.2018