typescript - Angular 2 - erstatt historikk i stedet for å legge til
Hvordan erstatte en historikk i stedet for å pushe en ny i Angular 2s nye ruter (rc.1)?
For eksempel er jeg i en spørsmålsliste (/questions) og åpner en ny modal i en ny rute (/questions/add), og etter å ha lagt til et nytt spørsmål går jeg til spørsmålsvisningen (/questions/1). Hvis jeg trykker tilbake, ønsker jeg å gå til /questions i stedet for /questions/add
Svar #1
Hvis du bruker
router.navigate
Og så
location.replaceState
Med nøyaktig samme sti kan du utløse endringer som vanligvis skjer, samt erstatte historikken.
For eksempel, i ditt tilfelle:
this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');
Hvis du trenger å legge til parametere til ruten, kan du lage URL-en for plasseringen ved å bruke
router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
I ditt eksempel:
this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
Oppdater
Det ser ut til at Angular-routeren nå kommer med et alternativ for å erstatte URL. I ditt eksempel:
this.router.navigate(["questions/1"], {replaceUrl:true});
Oppdatering 2
Det finnes et aktuelt problem der flere navigasjoner utført på kort tid kanskje ikke erstatter URL-en korrekt. Som en midlertidig løsning kan du pakke navigate-funksjonen inn i en timeout for å få hver til å kjøre i en separat syklus:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
Svar #2
Du vil bruke replaceState fra Locations-klassen
https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!#replaceState-anchor
