javascript - Gjengi på nytt (last på nytt) router-outlet i Angular 5


Jeg har Angular 5 og har et problem med å gjengjøre (laste på nytt) router-outlet. Jeg har lenker http://example.com/:unit/home/somethingElse. I headeren har jeg en bryter for å endre unit. Og når det skjer, trenger jeg å hente nye data fra en server og sette det i headeren, hjemmesiden og en footer (jeg har http-metoder i ngOnInit i disse komponentene). Når jeg endrer unit (URL), forblir dataene uendret.

Jeg prøvde å bruke: this.router.routeReuseStrategy.shouldReuseRoute =() => false; Det fungerer. Men det rendrer overskriften og bunnteksten min hver gang jeg navigerer til andre sider.

Jeg vet at jeg kan bruke i this.activatedRoute.params.subsribe() og legge alle mine http-metoder der, men for å implementere denne løsningen må jeg omskrive mye kode.

Finnes det en måte å gjengi (laste på nytt) en spesifikk router-outlet når jeg vil? Kan du hjelpe meg.

Svar #1

Hvis det å bruke shouldReuseRoute =() => false fungerer for deg, vil den generelle tilnærmingen være å lage en tilpasset RouteReuseStrategy. I shouldReuseRoute kan du sjekke om ruteparametere er forskjellige for de samme rutekomponentene, og hvis ja, returner false, altså noe sånt som dette:

if (future.component === curr.component) {
  if (curr.paramMap.keys.length) {
     const diff = curr.paramMap.keys.filter((key) =>
       curr.paramMap.get(key) !== future.paramMap.get(key));
     if (diff.length) { return false; }
  }
}