Ich möchte die Werte von URL-Abfrageparametern mit AngularJS lesen. Ich greife mit der folgenden URL auf den HTML-Code zu:
http://127.0.0.1:8080/test.html?target=bob
Wie erwartet location.search
ist "?target=bob"
. Für den Zugriff auf den Wert von target habe ich verschiedene Beispiele im Web gefunden, aber keines davon funktioniert in AngularJS 1.0.0rc10. Insbesondere sind alle die folgenden undefined
:
$location.search.target
$location.search['target']
$location.search()['target']
Weiß jemand was funktionieren wird? (Ich verwende $location
als Parameter für meinen Controller)
Aktualisieren:
Ich habe unten eine Lösung veröffentlicht, bin aber nicht ganz zufrieden damit. In der Dokumentation im Entwicklerhandbuch: Angular Services: Verwenden von $ location wird Folgendes beschrieben $location
:
Wann sollte ich $ location verwenden?
Jedes Mal, wenn Ihre Anwendung auf eine Änderung der aktuellen URL reagieren muss oder wenn Sie die aktuelle URL im Browser ändern möchten.
In meinem Szenario wird meine Seite von einer externen Webseite mit einem Abfrageparameter geöffnet, sodass ich nicht per se auf eine Änderung der aktuellen URL reagiere. Vielleicht $location
ist es nicht das richtige Werkzeug für den Job (für die hässlichen Details siehe meine Antwort unten). Ich habe daher den Titel dieser Frage von "Wie lese ich Abfrageparameter in AngularJS mit $ location?" Geändert. zu "Was ist die prägnanteste Methode zum Lesen von Abfrageparametern in AngularJS?". Natürlich könnte ich nur Javascript und reguläre Ausdrücke zum Parsen verwenden location.search
, aber wenn ich für etwas so Grundlegendes auf diese niedrige Ebene gehe, beleidigt dies wirklich die Sensibilität meines Programmierers.
Also: Gibt es einen besseren Weg $location
als ich in meiner Antwort oder gibt es eine prägnante Alternative?
http://127.0.0.1:8080/test.html#?target=bob
würde funktionieren, beachte das #
vor dem ?
. $location
ist eine Routing-Methode der zweiten Ebene, die nicht an den Server gesendet wird.
$location.search()['target']
funktioniert nachdem $locationProvider.html5Mode(true)
in einem modernen Browser aufgerufen wurde.