2016-07-15 10 views
0

Ich erzwinge eine Route ändern mit diesem Code (entsprechend mit einem Klick auf die Schaltfläche). Die vollständige Methode sieht wie folgt aus:Angular 2.0.0-beta.2 Router injizieren unerwünschte "?" Suffix in Route

submit(){ 
    this.store.dispatch({type: MasterScreenerActions.SUBMIT}); 
    this.router.navigateByUrl('master-screener-results'); 
} 

Nun, dies funktioniert gut, aber wenn ich auf dem Browser zurückschlagen und dann auf die submit Taste erneut, wird der Browser so mögen navigieren: Navigated to http://localhost:4200/master-screener-results?. Beachten Sie die ? am Ende. Allerdings wird der Browser schließlich nach dem Laden der Anwendung usw. an der richtigen URL ankommen, zB /master-screener-results. Das Problem ist, dass diese Route nur aktiviert oder verbunden werden soll, nachdem verschiedene Formulare ausgefüllt wurden, die master-screener andeuten.

Warum ist dieses Verhalten und wie tritt es auf? Sollte master-screener-results eine Kindkomponente sein? Muss ich irgendeine Art von Wache implementieren? Irgendwelche Tipps oder Tipps, wo Sie anfangen zu suchen, wird sehr geschätzt.

edit: Ich bekomme auch noch ein ?null=on Suffix auf meiner Route nach ein wenig fummeln ... was bedeutet das?

edit2: dieses Verhalten scheint auftreten, wenn und nur wenn die Vorlage bereits geladen worden ist, das heißt, zone.js:101 XHR finished loading: GET "http://localhost:4200/app/master-screener-results/master-screener-results.component.html"., der nächste Anruf in Navigated to http://localhost:4200/master-screener-results?

Antwort

1

führen werde ich mit Ihnen gerade jetzt das gleiche Problem hatte. Was ich hatte, war so etwas wie dieses:

<form> 
    <input ...> 
    <button (click)="submitForm()">Submit</button> 
</form> 

und der Code:

submitForm() { 
    // do something 
    this.router.navigate(["../home"], {relativeTo: this.r}); 
} 

Nach dem Debuggen erkannte ich, dass es geschieht nur, wenn ich einen <button> in einem <form> klicken, aber nicht auf eine <a> klicken; was zu meiner Schlussfolgerung führt, dass die Standardaktion der button nicht verhindert wird. Und diese Änderung hilft mir:

submitForm() { 
    // do something 
    this.router.navigate(["../home"], {relativeTo: this.r}); 
    return false; // prevent default action 
} 
Verwandte Themen