从参数对象构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风格)提出请求。

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> 

这是否适合您的情况?

angular的内部和外部URL格式规则稍有不同。

$ location是在你自己的应用程序中激活内部路由的一种方法。

如果是外部链接,那么$ http就是你想要的。

如果它是一个内部链接,那么检查它可能是值得检查哈希/爆炸语法。