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

Relaterte artikler