Comment construire une URL avec des paramètres de requête dans Angularjs.
Je vois l'API $ location.search ()
le problème est $ location (url) est de rediriger vers l'URL. Dans mon cas, je veux passer une paire URL/clé: valeur pour les paramètres de requête et construire l’URL. quelque chose comme
url: /a/b/c
paramètres: {field1: value1, field2: value2}
résultat: /a/b/c?field1=value1&field2=value2
J'aime utiliser cette URL pour les liens. J'ai aussi vu angular encoder ?
, &
personnages. Puis-je éviter cela?
Mon intention était d'utiliser l'URL comme href pour les éléments d'ancrage. J'utilise la requête $ http pour envoyer la requête, mais je dois parfois fournir un lien avec des paramètres de requête (basés sur l'objet actuel)
Merci
Il existe une solution intéressante à partir de 1.4+. Vous pouvez créer une chaîne de requête à partir d'un objet parameters avec $httpParamSerializer
:
var qs = $httpParamSerializer(params);
Sérialiseur $ http params par défaut qui convertit les objets en chaînes selon les règles suivantes:
{'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.
Angular utilise la fonction buildUrl()
en interne pour créer une chaîne de requête à partir d'un objet de paramètres. Pour le moment, il est impossible de l’utiliser dans votre code car il est privé de $HttpProvider
À moins que vous ne vouliez faire de la magie eval()
.
Problèmes liés à github:
Croyez que vous êtes vraiment en train d'aboyer le mauvais arbre ... vous devez jeter un coup d'œil au service $ http qui vous donne $ http.get (url, config) ou $ http.post (url, données, config). Pour une demande GET avec des paramètres, voir le SO suivant
$ http get paramètres ne fonctionne pas
Pour plus d'informations sur $ http et son fonctionnement, reportez-vous à la documentation Angular.
http://docs.angularjs.org/api/ng.$http
Je ne comprends peut-être pas le but et vous voulez réellement naviguer vers un endroit différent. Ce que je suggère ici, c'est simplement de faire la demande en arrière-plan (style AJAX).
Le 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");
};
}])
Le HTML
<div ng-app="myApp" ng-controller="MyCtrl">
<a href="#" ng-click="goPlaces('google.com','Shaun Husain')">Find me</a>
</div>
Est-ce que cela fonctionne pour votre cas?
les règles de formatage des URL internes et externes d'angular sont légèrement différentes.
L'emplacement $ est un moyen d'activer les routes internes au sein de votre propre application.
Si c'est un lien externe, alors $ http est ce que vous voulez.
S'il s'agit d'un lien interne, vérifiez qu'il vaut peut-être la peine de vérifier la syntaxe hash/bang.