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

Relaterade artiklar