How to get query-Parameter aus der URL in Eckigen 5?
Ich bin mit eckigen 5.0.3, beginnen möchte ich meine Anwendung mit einem Bündel von query-Parametern. wie "/app?param1=hallo¶m2=123". Jeder Tipp gegeben in Wie get query-Parameter aus der url in angular2? funktioniert bei mir nicht.
Irgendwelche Ideen, wie man Abfrage-Parameter funktionieren?
private getQueryParameter(key: string): string {
const parameters = new URLSearchParams(window.location.search);
return parameters.get(key);
}
Diese private function hilft mir, um meine Parameter, aber ich glaube nicht, es ist der richtige Weg, neue Eckige Umgebung.
[update:]
Meine Haupt-app sieht aus wie
@Komponente({...})
export-Klasse AppComponent implementiert OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
//would like to get query parameters here...
//this.route...
}
}
- Sind Sie Router verwenden? Wo ist die URL kommen?
- Ja, eine ActivatedRoute. Ich aktualisiert meine Frage, um zu zeigen, wie mein Haupt-Komponente aussieht.
- Können Sie auch zeigen Sie mir Ihre route konstant, wo Sie setup alle Strecken?
- const appRoutes: Routen = [ {path: eine "Komponente: PageOneComponent}, {path: "", redirectTo: "/man", pathMatch: "voll"}, {path: "**", redirectTo: "/man"} ]; " Meine Route konstant. Ich würde gerne alle Parameter, die in der Haupt-app speichern Sie es in ein DTO, dann navigieren Sie zu einer anderen Seite. Die navigation funktioniert wie erwartet, aber ich bekomme die Abfrage-Parameter bei main nur durch meine 'getQueryParameter" - Funktion. Ich merke in deiner Frage gibt es etwas, was ich vergessen habe. Muss ich mark meine Parameternamen überall?
- Ja, in den Routen, die Sie benötigen, Parameter zu definieren, wie gut. Wenn Sie überprüfen Sie die routing-docs auf eckig.io, können Sie sehen, wie Sie definieren die Parameter auf einer bestimmten route. So etwas wie dieses {path: 'abc/:param1', Komponente: componentClassName}
- Sobald Sie dies getan haben, alles, was in der url nach Ihrer domain/abc, werden param1. Zum Beispiel localhost:4200/abc/100, in diesem Fall 100 param1, die Sie zugreifen können, wie Dmitri beantwortet hat unten
- Beachten Sie auch, dass die ActivatedRoute Params-Objekt gibt eine beobachtbare, so dass Sie, die Sie abonnieren müssen, um Zugriff auf den param-Wert.
- Ich habe rund 10 Parameter in einer anderen Reihenfolge. Daher muss ich mit named-query-Parameter. Und wie kann ich einstellen das mein main AppComponent zu erkennen, dass es 10 Parameter. Alle Proben, die ich gelesen und gesehen verwenden die einfachen "abc/:param1' Beispiel. Ich brauche ein '/?a="Wert"&b="anderer Wert"... wo die benannten parameter 'a' wird durch den Wert, den parameter 'b' wird 'anderer Wert' und so weiter.
- Sollte dieser Artikel Ihr problem zu lösen. Winkel-2-Trainings-Buch.rangle.io/handout/routing/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Winkel 5, die query-Parameter werden aufgerufen, indem die Beteiligung an diesem.route.queryParams.
Beispiel: "/app?param1=hallo¶m2=123"
in der Erwägung, dass die Pfad-Variablen zugegriffen wird, die durch "diese.route.snapshot.params"
Beispiel: "/param1/:param1/param2/:param2"
Dies ist die sauberste Lösung für mich
Weiß ich, dass OP gefragt, für Eckige 5-Lösung, aber doch für alle, die Ihr stolpert auf diese Frage für die neue (6+) Eckige Versionen. Unter Berufung auf die Docs, über ActivatedRoute.queryParams (die die meisten anderen Antworten sind basierend auf):
Entsprechend der Docs, der einfache Weg, um die Abfrage-Parameter würde wie folgt Aussehen:
Sich für erweiterte Möglichkeiten (z.B. erweiterte Komponente re-Verwendung) finden Sie unter diese Docs Kapitel.
EDIT:
Als es richtig angegeben in den Kommentaren unten, diese Antwort ist falsch - zumindest für den Fall angegeben, OP.
OP fragt man Globale query-Parameter (/app?param1=hallo¶m2=123); in diesem Fall sollten Sie queryParamMap (wie in @dapperdan1985 Antwort).
paramMap, auf der anderen Seite, ist auf spezifische Parameter der Strecke (z.B. /app/:param1/:param2, was sich in /app/hallo/123).
Dank @JasonRoyle und @daka für den Hinweis it out.
queryParamMap
nichtparamMap
zu Holen query-string-Parameter?paramMap
funktioniert nicht.Können Sie auch HttpParams, wie:
path: '', redirectTo: '/list'
. Die diesem.route.snapshot funktioniert nicht für mich, weil es redirectTo /Liste die Beseitigung der 'lang' - queryString. Aber diese Lösung funktioniert bei mir.UPDATE
this.route.snapshot.queryParamMap
aber es ist leer. Ich brauche solche Parameter als optionale Parameter. Ein service, der es viel zu kompliziert für den Anrufer|Benutzer hier.seine Arbeit für mich:
Blick mehr Optionen Wie get query-Parameter aus der url in angular2?
Stolperte über diese Frage, wenn ich war auf der Suche für eine ähnliche Lösung, aber ich didn ' T brauchen etwas wie full application-level-routing oder mehr importierten Module.
Folgende code funktioniert Super für meinen Gebrauch und erfordert keine zusätzlichen Module oder importiert.
http://localhost:4200/?param1=hello¶m2=123
Ausgänge:Wenn Sie mit einer leeren route-Objekt, es ist vor allem aufgrund der Tatsache, dass Sie nicht mit einem router-Steckdose im app.component.html.
Ohne diese, werden Sie nicht in der Lage, eine sinnvolle route-Objekt mit nicht leeren Unterobjekte, besonders params & queryParams.
Versuchen, hinzufügen
<router-outlet><router-outlet>
nur vor dem Aufruf von Ihrem<app-main-component></app-main-component>
Vor, dass, stellen Sie sicher, dass Ihre Abfrage param bereit, in-app-routing > die Ausfuhr der Klasse Route verwendet, die von App-Komponente :
Letzte, was, natürlich, um Ihre param, ich personnaly verwenden
this.route.snapshot.params.dynamicParam
wo dynamicParam ist der name, die Sie in Ihrem app-routing-Komponente 🙂Seien Sie vorsichtig mit Ihren Routen. Ein "redirectTo" entfernen|löschen von query-parameter.
Rief ich meine wichtigsten Komponente mit query-Parameter wie "/main?param1=a¶m2=b und nehmen an, dass meine query-Parameter kommen in die "ngOnInit ()" - Methode in der main-Komponente vor der Weiterleitung die Weiterleitung wirksam wird.
Aber das ist falsch. Die Umleitung kam vor, löschen Sie die Abfrage-Parameter und rufen Sie die ngOnInit () - Methode in der main-Komponente ohne Abfrage von Parametern.
Änderte ich die Dritte Zeile meiner Strecken zu
und jetzt meine Abfrage Parameter sind zugänglich, die in den wichtigsten Komponenten ngOnInit und auch in der PageOneComponent.
Gefunden in: Übergeordnete Komponenten leer Params aus ActivatedRoute
Arbeitete für mich:
Wenn Sie nicht mit dem Winkel-router versuchen, querystring. Installieren Sie es
Ihrem Projekt. In der Komponente, so etwas wie dies tun
Den
substring(1)
ist notwendig, weil, wenn Sie so etwas wie dieses'/mypage?foo=bar'
dann der name des Schlüssels für?foo