Ich benutze angle2.0.0-beta.7. Wenn eine Komponente in einen Pfad geladen wird, zu dem /path?query=value1
sie umgeleitet wird /path
. Warum wurden die GET-Parameter entfernt? Wie kann ich die Parameter beibehalten?
Ich habe einen Fehler in den Routern. Wenn ich eine Hauptroute habe wie
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
und mein Kind Route wie
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
dann kann ich keine Parameter in TodoListComponent bekommen. Ich kann bekommen
params("/my/path;param1=value1;param2=value2")
aber ich will den Klassiker
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
quelle
quelle
@RouteConfig
für diesepath
?Antworten:
Durch Injizieren einer Instanz von
ActivatedRoute
kann man eine Vielzahl von Observablen abonnieren, einschließlich aqueryParams
und aparams
Observable:A HINWEIS ZUR ABMELDUNG
@Reto und @ codef0rmer hatten zu Recht darauf hingewiesen, dass gemäß den offiziellen Dokumenten in diesem Fall eine Methode
unsubscribe()
innerhalb der KomponentenonDestroy()
nicht erforderlich ist. Dies wurde aus meinem Codebeispiel entfernt. (siehe blaues Warnfeld in diesem Tutorial)quelle
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Wenn eine URL wie diese http://stackoverflow.com?param1=value
Sie können den Parameter 1 per Code erhalten:
quelle
Obwohl in der Frage die Version Beta 7 angegeben ist , wird diese Frage bei Google auch als Top-Suchergebnis für häufig verwendete Ausdrücke wie Winkel-2-Abfrageparameter angezeigt . Aus diesem Grund finden Sie hier eine Antwort für den neuesten Router (derzeit in Alpha.7) ).
Die Art und Weise, wie die Parameter gelesen werden, hat sich dramatisch geändert. Zuerst müssen Sie die
Router
in Ihre Konstruktorparameter aufgerufene Abhängigkeit wie folgt einfügen:und danach können wir die Abfrageparameter auf unserer
ngOnInit
Methode abonnieren (Konstruktor ist auch in Ordnung,ngOnInit
sollte aber für die Testbarkeit verwendet werden) wieIn diesem Beispiel lesen wir die Abfrageparameter- ID von URL wie
example.com?id=41
.Es gibt noch wenige Dinge zu beachten:
params
like gibtparams['id']
immer eine Zeichenfolge zurück , die durch Präfixieren in eine Zahl konvertiert werden kann+
.quelle
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.Die Antwort von @ StevePaul hat mir sehr gut gefallen, aber wir können das Gleiche tun, ohne einen fremden Anruf zum Abonnieren / Abbestellen zu tätigen.
quelle
Abfrageparameter senden
Abfrageparameter empfangen
Offizielle Quelle
quelle
Hallo, Sie können URLSearchParams verwenden. Weitere Informationen finden Sie hier .
importieren:
und Funktion:
Hinweis : Es wird nicht von allen Plattformen unterstützt und scheint von eckigen Dokumenten im Status "EXPERIMENTELL" zu sein
quelle
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
Zunächst einmal habe ich bei der Arbeit mit Angular2 festgestellt, dass die URL mit einer Abfragezeichenfolge lautet/path;query=value1
So greifen Sie auf eine Komponente zu, die Sie verwenden So ist dies, aber jetzt folgt ein Codeblock:
Dies ist kein Standardverhalten, warum es beim Laden der Komponente entfernt wird. Ich habe in einem sauberen Testprojekt speziell eingecheckt und wurde nicht umgeleitet oder geändert. Ist es eine Standardroute oder etwas anderes, das das Routing besonders macht?
Weitere Informationen zum Routing mit Abfragezeichenfolgen und Parametern finden Sie im Angular2-Lernprogramm unter https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters
quelle
Sie können die Abfrageparameter abrufen, wenn Sie die URL mit ActivatedRoute wie folgt übergeben: -
URL: - http: /domain.com? test = abc
quelle
URL-Parameter als Objekt abrufen.
quelle
Wenn Sie den Abfrageparameter nur einmal abrufen möchten, verwenden Sie am besten die Methode take , damit Sie sich keine Gedanken über die Abmeldung machen müssen. Hier ist der einfache Ausschnitt: -
Hinweis: Entfernen Sie take (1), wenn Sie zukünftig Parameterwerte verwenden möchten.
quelle
jetzt ist es:
quelle
Ich hoffe es wird jemand anderem helfen.
Die obige Frage besagt, dass der Wert des Abfrageparameters benötigt wird, nachdem die Seite umgeleitet wurde, und wir können davon ausgehen, dass der Snapshot-Wert (die nicht beobachtbare Alternative) ausreichend wäre.
Niemand hier erwähnte über snapshot.paramMap.get aus der offiziellen Dokumentation .
Fügen Sie vor dem Senden Folgendes in die Komponente zum Senden / Umleiten ein:
dann wie folgt umleiten ( hier dokumentiert ):
oder einfach:
Stellen Sie sicher, dass Sie dies in Ihrem Routing-Modul hinzugefügt haben, wie hier dokumentiert :
Und schließlich in Ihrer Komponente, die den Abfrageparameter verwenden muss
Importe hinzufügen ( hier dokumentiert ):
ActivatedRoute injizieren
(Die Dokumentation importiert auch switchMap und injiziert Router und HeroService. Sie werden jedoch nur für eine beobachtbare Alternative benötigt. Sie werden NICHT benötigt, wenn Sie eine Snapshot-Alternative wie in unserem Fall verwenden.)
und erhalten Sie den Wert, den Sie benötigen ( hier dokumentiert ):
HINWEIS: WENN SIE EINEM ROATING-MODUL EINEM FUNKTIONSMODUL HINZUFÜGEN (WIE IN DER DOKUMENTATION ANGEZEIGT), STELLEN SIE SICHER, DASS IN APP.MODULE.ts DAS ROUTING-MODUL VOR dem AppRoutingModule (oder einer anderen Datei mit App-Routen auf Root-Ebene) IN IMPORTS: [] KOMMT. Andernfalls werden keine Funktionsrouten gefunden (da sie nach {path: '**', redirectTo: '/ not-found'} kommen würden und Sie nur eine nicht gefundene Nachricht sehen würden).
quelle
Sie müssen nur ActivatedRoute in den Konstruktor einfügen und dann einfach auf params oder queryParams zugreifen
In einigen Fällen gibt es in NgOnInit nichts ... möglicherweise aufgrund eines Init-Aufrufs vor der Initialisierung von Parametern. In diesem Fall können Sie dies erreichen, indem Sie Observable bitten, mit der Funktion debounceTime (1000) einige Zeit zu warten.
zB =>
debounceTime () Gibt einen Wert von der Quelle aus, der erst nach Ablauf einer bestimmten Zeitspanne ohne weitere Quellenemission beobachtet werden kann
quelle
Sie können keinen Parameter vom RouterState abrufen, wenn er nicht in der Route definiert ist. In Ihrem Beispiel müssen Sie also den Querystring analysieren ...
Hier ist der Code, den ich verwendet habe:
quelle
Abfrage und Pfad (Winkel 8)
Wenn Sie eine URL wie https://myapp.com/owner/123/show?height=23 haben, verwenden Sie
AKTUALISIEREN
Wenn Sie verwenden
this.router.navigate([yourUrl]);
und Ihre Abfrageparameter in eineyourUrl
Zeichenfolge eingebettet sind, codiert Angular eine URL und Sie erhalten so etwas wie https://myapp.com/owner/123/show%3Fheight%323 - und die obige Lösung führt zu einem falschen Ergebnis ( queryParams ist leer und Abfrageparameter können an den letzten Pfadparameter geklebt werden, wenn er sich am Pfadende befindet. In diesem Fall wird die Art und Weise der Navigation auf diesemquelle