Строка запроса запроса из объекта параметров
Как создать URL-адрес с параметрами запроса в Angularjs.
Я вижу API $location.search()
проблема $location (url) заключается в перенаправлении на url. В моем случае я хочу передать пары url и key: value для параметров запроса и построить url. что-то вроде
url: /a/b/c
params: {field1: value1, field2: value2}
результат: /a/b/c?field1=value1&field2=value2
Мне нравится использовать этот URL для ссылок. Я также видел angular encode ?
, &
символы. Могу ли я избежать этого?
Изменить:
Мое намерение состояло в том, чтобы использовать url как href для элементов привязки. Я использую $http для отправки запроса, но иногда мне нужно предоставить ссылку с параметрами запроса (на основе текущего объекта)
Спасибо
Ответы
Ответ 1
Есть хорошее решение по версии 1.4+. Строку запроса можно создать из объекта параметров с помощью $httpParamSerializer
:
var qs = $httpParamSerializer(params);
См. здесь документы
Сериализатор $http params по умолчанию, который преобразует объекты в строки в соответствии со следующими правилами:
{'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.
Ответ 2
Angular использует внутреннюю функцию buildUrl()
для создания строки запроса из объекта параметров. Пока что невозможно использовать его в вашем коде, потому что он закрыт для $HttpProvider
, если вы не хотите использовать магию eval()
.
Связанные с этим проблемы в github:
Ответ 3
Поверьте, что вы действительно лаяете по неправильному дереву... вам нужно взглянуть на службу $http, которая дает вам $http.get(url, config) или $http.post(url, data, config). Для запроса GET с параметрами см. Следующий SO
$http получить параметры не работают
Информацию о $http и способах ее работы см. в документах Angular.
http://docs.angularjs.org/api/ng.$http
Возможно, я неправильно понимаю цель, и вы действительно хотите перейти в другое место, я предлагаю здесь просто сделать запрос в фоновом режиме (стиль AJAX).
http://jsfiddle.net/4ZcUW/
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");
};
}])
HTML
<div ng-app="myApp" ng-controller="MyCtrl">
<a href="#" ng-click="goPlaces('google.com','Shaun Husain')">Find me</a>
</div>
Это работает для вашего случая?
Ответ 4
angular внутренние и внешние правила форматирования URL немного отличаются.
Местоположение $является средством активации внутренних маршрутов в вашем собственном приложении.
Если это внешняя ссылка, то $http - это то, что вы хотите.
Если это внутренняя ссылка, проверьте, возможно, стоит проверить синтаксис hash/bang.