Trasa
const appRoutes: Routes = [
{ path: '', redirectTo: '/companies/unionbank', pathMatch: 'full'},
{ path: 'companies/:bank', component: BanksComponent },
{ path: '**', redirectTo: '/companies/unionbank' }
]
Składnik
const NAVBAR = [
{
name: 'Banks',
submenu: [
{ routelink: '/companies/unionbank', name: 'Union Bank' },
{ routelink: '/companies/metrobank', name: 'Metro Bank' },
{ routelink: '/companies/bdo', name: 'BDO' },
{ routelink: '/companies/chinabank', name: 'China Bank' },
]
},
...
]
Przykład linku: http://localhost:8099/#/companies/bdo
Chcę uzyskać String
bdo w przykładowym linku powyżej.
Jestem świadomy, że mogę uzyskać link za pomocą window.location.href i podzielić na tablicę. Mogę więc uzyskać ostatni parametr, ale chcę wiedzieć, czy istnieje właściwa metoda robienia tego pod kątem.
Każda pomoc będzie mile widziana. Dzięki
źródło
paramMap
, należy używaćparams.get('bank')
zamiast.this.route.snapshot.paramMap.get('bank');
ithis.route.snapshot.params.bank;
?W Angular 6+ jest to obsługiwane nieco inaczej niż w poprzednich wersjach. Jak @BeetleJuice wspomina w powyższej odpowiedzi ,
paramMap
jest to nowy interfejs do pobierania parametrów trasy, ale wykonanie jest nieco inne w nowszych wersjach Angular. Zakładając, że jest to komponent:Wolę używać obu, ponieważ wtedy przy bezpośrednim ładowaniu strony mogę uzyskać parametr ID, a także w przypadku nawigacji między powiązanymi podmiotami subskrypcja zaktualizuje się poprawnie.
Źródło w Angular Docs
źródło
switchMap
być tutaj wymagane? Czy subskrypcja nie zostanie wywołana również podczas bezpośredniego ładowania strony?map
operatora RxJS . AleHeroService
zwraca onObservable<Hero>
.switchMap
Zamiast tego spłaszczasz Observable z operatorem.switchMap
Operator również anuluje poprzednie żądania w locie. Jeśli użytkownik ponownie przejdzie do ta trasa z nową,id
podczas gdyHeroService
wciąż pobiera stareid
,switchMap
odrzuca stare żądanie i zwraca bohatera do nowegoid
. "