2016-08-09 39 views
3

Ich konvertiere eine vorhandene Anwendung in Angular 2 und benötige eine Anforderung, bei der ein Abfrageparameter null oder mehr (d. H. Wiederholt) mal angezeigt werden kann. Ein Beispiel wäre eine URL mit mehreren Parametern zum Sortieren (wie in #/results/data;sort=column1;sort=column2) oder beim Aufrufen von Solr-Instanzen und Angeben mehrerer Facettenfiltern (https://cwiki.apache.org/confluence/display/solr/Common+Query+Parameters#CommonQueryParameters-Thefq(FilterQuery)Parameter). Typischerweise erkennt der empfangende Endpunkt diese wiederholten Parameter und präsentiert sie als ein Array.Wiederholter Abfrageparameter in Angular 2 Routing

Wie kann ich dies mit Angular 2 Routing tun? Ich benutze RC4 mit dem Router 3.0-beta-2. Wenn ich die ActivatedRoute abonnieren und die params betrachten, wird nur der letzte wiederholte Wert zurückgegeben, aber ich weiß, dass die vollständige URL übergeben wird, da Location.path() zeigt, was getippt wurde.

Zum Beispiel angesichts der folgenden URL

https://localhost:44300/#/search;fq=efg:456;q=xyz;fq=abc 

console.log(this.location.path(false)); zeigt /search;fq=efg:456;q=xyz;fq=abc

aber nur Object {fq: "abc", q: "xyz"} mit

this.route.params.subscribe(params => { 
    console.log(params); 
}); 

Antwort

2

Update

dies seit einiger Zeit bereits unterstützt wird.

orginal

Dies wird derzeit nicht unterstützt.
Es gibt ein offenes Problem, um schließlich Unterstützung für mehrere Werte zu erhalten.

https://github.com/angular/angular/issues/9477

+0

Vielen Dank für die schnelle Antwort. – Jason

+0

Dies wird jetzt unterstützt: https://github.com/angular/angular/pull/11373 – jcroll

+0

@jcroll groß! Danke für die Rückmeldung –

0

Zur Weiterleitung komplexer Daten zwischen den Ansichten zurückgegeben ich glaube, Sie wäre besser geeignet, wenn ein Service in jede der Komponenten anstelle von Abfrageparametern eingefügt wird.

+0

Die Buchung hat nichts mit der Weitergabe von Daten zwischen Ansichten zu tun. Es hat mit dem Aufbau einer URL und der Übergabe von Parametern an eine * einzige Ansicht * zu tun, in der die Parameternamen wiederholt werden können. – Jason

1

Update: dies jetzt fixed sein sollte.

this.route.params.subscribe(params => { 
    // assuming ?foo=a&foo=b&bar=c 
    // should return an object {'foo': ['a', 'b'], 'bar': 'c'} 
    console.log(params); 
});