typescript - Angular 2 - ersätt historik istället för att lägga till
Hur man ersätter en historik istället för att trycka in en ny i Angular 2:s nya router (rc.1)?
Till exempel, jag är i en frågelista (/questions) och öppnar ett nytt modal i en ny rutt (/questions/add), och efter att ha lagt till en ny fråga går jag till frågevyen (/questions/1). Om jag trycker på bakåt vill jag gå till /questions istället för /questions/add
Svar #1
Om du använder
router.navigate
Och sedan
location.replaceState
Med exakt samma väg kan du utlösa ändringar som vanligtvis sker, samt ersätta historiken.
Till exempel, i ditt fall:
this.router.navigate(['questions/1']);
this.location.replaceState('questions/1');
Om du behöver lägga till parametrar till rutten kan du skapa URL:en för platsen med hjälp av
router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
I ditt exempel:
this.router.navigate(['questions/1', {name:"test"}]);
this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
Uppdatera
Det verkar som att Angular-router nu kommer med ett alternativ för att ersätta URL. I ditt exempel:
this.router.navigate(["questions/1"], {replaceUrl:true});
Uppdatering 2
Det finns ett aktuellt problem där flera navigeringar som görs under en kort tid kanske inte ersätter URL:en korrekt. Som en tillfällig lösning, omslut navigate-funktionen i en timeout för att få varje att köras i en separat cykel:
setTimeout(()=>{
this.router.navigate(["questions/1"], {replaceUrl:true});
});
Svar #2
Du vill använda replaceState från Locations-klassen
https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!#replaceState-anchor
