angular - a routerLink paraméterekkel megváltoztatja az URL-t, de nem navigál vagy tölti újra a komponenst
Már megnéztem a kapcsolódó kérdést router.navigate megváltoztatja az URL-t, de nem rendereli az komponenst, de ugyanaz a helyzet ugyanazt az eredményt okozza.
Van egy útvonalam az útvonalak modulomban:
{
path: "competition/details",
loadChildren: "../pages/competitions/competitions-details/competitions-details.module#CompetitionsDetailsModule"
}
Az az oldal ("competition-details") rendereli az elememet:
<standings-regular></standings-regular>
Aztán a komponensben ellenőrzöm a 2 opcionális paramétert:
this.competitionId = this.activatedRoute.snapshot.params.competition;
this.condition = this.activatedRoute.snapshot.params.condition;
És végül ezeket a paramétereket, a "competition"-t és a "condition"-t arra használom, hogy egy tömböt építsek. Eddig minden működik, ha az URL-t közvetlenül a böngészőbe írom:
pl.: http://localhost:4200/competition/details;competition=219;condition=home
Most ez alapvetően a versenyhez tartozó ugyanazon táblázat különböző nézeteit képviseli, egy kis kontextus kedvéért.
http://localhost:4200/competition/details;competition=219;condition=home az állástáblázatot jeleníti meg minden csapat számára a 219-es versenyből, csak az otthoni mérkőzésekkel.
http://localhost:4200/competition/details;competition=219 létrehozza a táblázatot az összes 219-es verseny mérkőzéseivel.
Tehát szeretnék egy hivatkozást ugyanabban a táblázatban, hogy az új URL-re navigáljak, de amikor megpróbálom, csak a böngésző URL-je változik, a nézet azonban nem változik.
Így próbálok navigálni:
<ul class="dropdown-menu btn-primary dropdown-menu-right">
<li>
<a md-ripple [routerLink]="['/competition/details', {competition: '219'}]">Completa</a>
</li>
<li>
<a md-ripple [routerLink]="['/competition/details', {competition: '219', condition: 'home'}]">Home Only</a>
</li>
</ul>
Megpróbáltam itt a routerLink-et egy (click)="" eseménnyel lecserélni, ami egy komponenst metódust hív meg a navigáláshoz, de az eredmény ugyanaz volt: a böngésző URL-je változik, de semmi nem történik.
Mind a router.navigate(), mind a router.navigateByUrl() függvényt kipróbáltam
Valami gondolat?
Válasz #1
Ahelyett, hogy a paraméter értékeit a „snapshot.params”-ből vennéd, fel kell iratkoznod az activatedRoute-ra az alábbiak szerint.
import { ActivatedRoute, Router, ParamMap } from "@angular/router";
tedd ezt a kódot a ngOnInit() függvényedbe
this.activatedRoute.paramMap.subscribe((params: ParamMap) => {
this.competitionId = params.get('competitionId ');
let condition = params.get('condition ');
//business logic what changes you want on the page with this new data.
});
Pillanatkép alapján az újratöltés nem történik meg, amikor útvonalparamétereket változtatunk az URL-ben, mert a konstruktor nem hívódik meg. De feliratkozás használatával figyelni fogja a paraméterekben bekövetkező változásokat.
