2016-08-08 45 views
0

Ich habe eine SearchComponent implementiert, wo der Benutzer Parameter wie Suchbegriffe und Facetten zum Filtern von Ergebnissen ändern kann. Ich möchte die URL mit den aktuell ausgewählten Parametern aktualisieren, damit der Benutzer den Link mit einem Lesezeichen versehen oder per E-Mail versenden kann.Building URL mit Abfrage-Parameter für Angular 2 Location

Meine Frage ist über die Aktualisierung der URL zu gehören Parameter. Ich weiß, ich sollte Location Dienst und speziell die go() Methode verwenden, aber ich kann nicht scheinen, welche Methode (n) zu meiner Sammlung von Parametern (entweder ein Array oder ein JavaScript-Objekt) zu nehmen und diese in eine entsprechend formatierte Abfrage zu verwenden String basierend auf dem aktuellen LocationStrategy. Soll ich die Sammlung durchschleifen und die Werte direkt verketten, um die einzelne Zeichenkette aufzubauen?

Code Snippets

Danach Entsendung ich mit der API mit Herumspielen fortgesetzt. Wie ich es verstehe,

#/search 

die Ausgabe von this.location.path(false) die folgenden URL HashLocationStrategy und gegebene Verwendung ist

/search 

(als Randnotiz ist die Ausgabe von this.location.path(true)auch/search)

Wenn ich Routing verwende, um die URL zu

012 zu ändern

die Ausgabe von this.location.path(false) logisch (Art) wird

/search;searchTerms=ftp 

Ich habe mir zu verlangen scheint mehrere Punkte der Besorgnis

  1. Wie bereits erwähnt, die URL Gebäude aus Namen verketten Wert-Paare, anstatt eine Hilfsmethode bereitzustellen, die es für Sie handhabt.
  2. Im Moment ist eine bestimmte Komponente unwissend über den Weg, der zur Instanziierung der Komponente verwendet wird. Die tatsächliche Route hängt davon ab, was Sie in die Router-Konfiguration eingegeben haben. Aber jetzt, um die Route zu aktualisieren, kann ich nicht einfach sagen "Fügen Sie diese besondere zur aktuellen Route hinzu", ich muss tatsächlich dieses Präfix aus der aktuellen URL extrahieren, um es in der aktualisierten URL zu verwenden.
  3. In Bezug auf Artikel # 2, muss ich tatsächlich den Wert von path() zurückgegeben und teilen Sie es oder den Index auf das ; Zeichen, so dass ich den Nicht-Parameter-Teil wieder verwenden kann?

Letztlich in meinem Kopf, eine Komponente den Pfad auf Veränderungen innerhalb der Komponente basiert Aktualisierung scheint ein sehr häufig Anwendungsfall zu sein noch die API es sehr umständlich und ein hässlich zu machen scheint manueller Prozess. Ich hoffe, ich bin etwas fehlt ...

Antwort

0

Ich meine, wenn man wirklich einen anderen Ansatz nehmen wollte, Sie encodeURIComponent(btoa(JSON.stringify(object))) können Sie die Query-String erzeugen und JSON.parse(atob(decodeURIComponent(string))), um es wieder in ein Objekt ...

Aber ich würde Schleifen empfehlen, wie Sie gesagt haben.

+0

Das Problem, das ich mit der Änderung der URL habe, war nicht nur die Erstellung von Parametern. Ich habe den Beitrag aktualisiert, um alle meine (verwandten) Fragen zum Standortdienst und zur API (oder zu fehlenden ...) besser zu erklären. – Jason