So erstellen Sie eine URL mit Abfrageparametern in Angularjs.
Ich sehe die API $ location.search ()
Das Problem ist, dass $ location (url) zur URL umleitet. In meinem Fall möchte ich ein URL- und ein Schlüssel-Wert-Paar für die Abfrageparameter übergeben und die URL erstellen. etwas wie
URL: /a/b/c
params:{field1: value1, field2: value2}
Ergebnis: /a/b/c?field1=value1&field2=value2
Ich benutze diese URL gerne für Links. Ich habe auch Winkelcodierung gesehen ?
, &
Zeichen. Kann ich das vermeiden?
Bearbeiten:
Meine Absicht war es, die URL als href für Ankerelemente zu verwenden. Ich verwende $ http, um die Anfrage zu senden, aber manchmal muss ich einen Link mit Abfrageparametern (basierend auf dem aktuellen Objekt) bereitstellen.
Vielen Dank
Antworten:
Ab 1.4+ gibt es eine schöne Lösung. Sie können eine Abfragezeichenfolge aus einem Parameterobjekt erstellen mit
$httpParamSerializer
:var qs = $httpParamSerializer(params);
Siehe Dokumente hier
{'foo': 'bar'} results in foo=bar {'foo': Date.now()} results in foo=2015-04-01T09%3A50%3A49.262Z (toISOString() and encoded representation of a Date object) {'foo': ['bar', 'baz']} results in foo=bar&foo=baz (repeated key for each array element) {'foo': {'bar':'baz'}} results in foo=%7B%22bar%22%3A%22baz%22%7D" (stringified and encoded representation of an object) Note that serializer will sort the request parameters alphabetically.
quelle
$httpBackend.expectGET()
mit komplizierten AbfrageparameternAngular verwendet die
buildUrl()
Funktion intern, um eine Abfragezeichenfolge aus einem Objekt von Parametern zu erstellen. Im Moment ist es unmöglich, es in Ihrem Code zu verwenden, da es privat ist, es$HttpProvider
sei denn, Sie möchten etwaseval()
Magie tun .Verwandte Themen zu Github:
quelle
Glauben Sie, dass Sie wirklich den falschen Baum bellen ... Sie müssen sich den $ http-Dienst ansehen, der Ihnen $ http.get (URL, Konfiguration) oder $ http.post (URL, Daten, Konfiguration) gibt. Eine GET-Anforderung mit Parametern finden Sie in der folgenden SO
$ http get-Parameter funktionieren nicht
Informationen zu $ http und seiner Funktionsweise finden Sie in den Angular-Dokumenten.
http://docs.angularjs.org/api/ng.$http
Vielleicht verstehe ich das Ziel jedoch falsch und Sie möchten tatsächlich zu einem anderen Ort navigieren. Ich schlage hier vor, die Anfrage nur im Hintergrund zu stellen (AJAX-Stil).
http://jsfiddle.net/4ZcUW/
Die JS
angular.module("myApp", []).controller("MyCtrl", ["$scope", "$window", function($scope, $window) { $scope.goPlaces = function(url, parameter) { $window.open("http://www."+url+"?q="+parameter); //$window.open("http://www."+url+"?q="+parameter, "_self"); //$window.open("http://www."+url+"?q="+parameter, "_top"); }; }])
Der HTML
<div ng-app="myApp" ng-controller="MyCtrl"> <a href="#" ng-click="goPlaces('google.com','Shaun Husain')">Find me</a> </div>
Funktioniert das für Ihren Fall?
quelle
url
als href für Ankerelemente zu verwenden. Ich benutze $ http, um die Anfrage zu senden, aber manchmal muss ich einen Link mit Abfrageparametern (basierend auf dem aktuellen Objekt) bereitstellenDie internen und externen URL-Formatierungsregeln von angle unterscheiden sich geringfügig.
Der $ -Standort ist ein Mittel zum Aktivieren interner Routen in Ihrer eigenen Anwendung.
Wenn es sich um einen externen Link handelt, ist $ http das, was Sie wollen.
Wenn es sich um einen internen Link handelt, überprüfen Sie, ob es sich lohnt, die Hash / Bang-Syntax zu überprüfen.
quelle