2016-12-02 4 views
1

Wenn ich navigiert werden programmatisch navigate Methode des RoutersAngular 2 Unterschied zwischen Routenparameter Stil

this.router.navigate(['/articles', {id: 1}]); Ergebnis url ist /articles;page=1

und der zweite Weg

this.router.navigate(['/articles', id]); Ergebnis url /articles/1

In beiden ist Variante Ich kann Werte über this.activatedRoute.params.forEach((params: Params) => {});

012 erhalten

Was ist der Unterschied außer Stil?

P.S. Gefunden question auf Unterschiede zwischen Abfrage params & Matrix im Zusammenhang params

Antwort

3

{id: 1} in ['/articles', {id: 1}] einen optionalen Routenparameter und hinzugefügt als Matrix Parameter Kind Routen und Abfrageparameter an die Wurzel Route

['/articles', id] sind ein normaler und gewünschte Strecke Parameter das ersetzt :id in dem Routenpfad.

+0

Thx für die Löschung, aber was ist die beste Wahl für die Einstellung optionaler Parameter wie Seitenzahl:/Artikel? Seite = 1 oder/Artikel; Seite = 1? – neilhem

+0

Das hängt davon ab, was Sie erreichen möchten. ': id' wird für die Routenanpassung verwendet. Abfrage- und Matrixparameter leiten Werte einfach weiter, ohne für die Routenanpassung in Betracht gezogen zu werden. Es hängt auch davon ab, ob Sie möchten, dass '/ articles' eine gültige Route ist oder nur'/articles/someid'. –

+0

Eigentlich ist '/ article; page = 1' ungültig. Es gibt eine Veränderung, die dies zu einem Fehler macht. Wie bereits erwähnt, werden optionale Routenparameter auf der Root-Route als Abfrageparameter serialisiert, daher ist nur die erste gültig. '/ parent/child; someparam = somevalue? page = 1' wäre gültig, weil' someparam' ein Parameter auf einer untergeordneten Route ist. Ich weiß nicht, wie sich das verhält, wenn Sie eine leere Pfad-Root-Route haben und "Artikel" die untergeordnete Route ist. In diesem Fall könnte Ihr zweites Beispiel gültig sein. Musste testen, um zu wissen, wie das resultierende Verhalten aussehen würde. –

Verwandte Themen