从参数对象构build查询string
如何在Angularjs中使用查询参数构build一个url。
我看到API $ location.search()
问题是$ location(url)是redirect到url。 在我的情况下,我想传递一个URL和键:值对查询参数,并build立url。 就像是
url: /a/b/c
params: {field1: value1, field2: value2}
结果: /a/b/c?field1=value1&field2=value2
我喜欢使用这个链接。 我也看到angular度编码?
, &
字符。 我能避免这个吗?
编辑:
我的意图是使用url作为锚点元素的href。 我使用$ http发送请求,但有时我需要提供一个链接,用查询参数(基于当前对象)
谢谢
有一个很好的解决scheme从1.4+。 您可以使用$httpParamSerializer
从参数对象中构build一个查询string:
var qs = $httpParamSerializer(params);
在这里看到文档
默认的$ http params序列化器根据以下规则将对象转换为string:
{'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在内部使用buildUrl()
函数从参数对象中创build一个查询string。 现在在代码中使用它是不可能的,因为除非你想做一些eval()
魔法,否则它是$HttpProvider
的私有。
github上的相关问题:
相信你真的是在吠叫错误的树……你需要看看$ http服务,它给你$ http.get(url,config)或$ http.post(url,data,config)。 对于具有参数的GET请求,请参阅以下SO
$ http get参数不起作用
有关$ http及其工作方式的信息,请参阅Angular文档。
http://docs.angularjs.org/api/ng.$http
也许我误解了目标,但实际上你想要导航到不同的地方,我在这里build议的只是在后台(AJAX风格)提出请求。
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>
这是否适合您的情况?
angular的内部和外部URL格式规则稍有不同。
$ location是在你自己的应用程序中激活内部路由的一种方法。
如果是外部链接,那么$ http就是你想要的。
如果它是一个内部链接,那么检查它可能是值得检查哈希/爆炸语法。