Javascript 从参数对象生成查询字符串
如何在Angularjs中使用查询参数构建url 我看到API了 问题是$location(url)是否要重定向到url。在本例中,我希望为查询参数传递url和key:value对,并构建url。差不多 url:Javascript 从参数对象生成查询字符串,javascript,angularjs,querystringparameter,Javascript,Angularjs,Querystringparameter,如何在Angularjs中使用查询参数构建url 我看到API了 问题是$location(url)是否要重定向到url。在本例中,我希望为查询参数传递url和key:value对,并构建url。差不多 url:/a/b/c 参数:{field1:value1,field2:value2} 结果:/a/b/c?field1=value1&field2=value2 我喜欢使用这个url链接。我还见过角度编码?,和字符。我能避免这个吗 编辑: 我的意图是将url用作锚元素的href。我确实使用$h
/a/b/c
参数:{field1:value1,field2:value2}
结果:/a/b/c?field1=value1&field2=value2
我喜欢使用这个url链接。我还见过角度编码?
,和
字符。我能避免这个吗
编辑:
我的意图是将url用作锚元素的href。我确实使用$http发送请求,但有时我需要提供一个带有查询参数的链接(基于当前对象)
谢谢相信你真的是找错人了。。。您需要看看$http服务,它为您提供$http.get(url,config)或$http.post(url,数据,config)。有关带参数的GET请求,请参见以下内容 有关$http及其工作方式的信息,请参阅Angular文档 也许我误解了这个目标,而您实际上想要导航到另一个地方,我在这里建议的只是在后台发出请求(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就是您想要的
如果是内部链接,那么检查hash/bang语法是否值得。Angular在内部使用
buildUrl()
函数从参数对象生成查询字符串。现在不可能在代码中使用它,因为它是$HttpProvider
的私有资源,除非您想执行一些eval()
魔术
github的相关问题:
- 从1.4+开始,有一个很好的解决方案。您可以使用
$httpParamSerializer
从参数对象生成查询字符串:
var qs = $httpParamSerializer(params);
将对象转换为字符串的默认$http参数序列化程序
根据以下规则:
我的意图是使用
url
as href作为锚元素。我确实使用$http发送请求,但有时我需要提供一个带有查询参数(基于当前对象)的链接@bsr:我不知道,但您确定编码不是您将结果URL视为HTML树一部分的方式的产物吗(例如,需要对符号进行编码以避免被误认为实体的初始字符)?嗯,在这种情况下,您可能希望使用$window来使用浏览器提供的打开功能,而不是浏览Angular的$location,因为这与路由有关,而不仅仅是导航(被命名为location,你可能认为它可以导航,但我不太确定)不确定如果我看不到答案,我会摆弄它,我会发布它。@liori你是对的。编码的url只有在你跟随链接时才会显示(如果重定向不是通过$location.search(),而是手动构造的href字符串)。这也是相关的。下面介绍了通用JS(无角度)的问题,这让我很难相信仍然需要外部库。JavaScript中有一个完整的DOM API,但没有任何内容。太棒了!您愿意接受答案吗?在使用$httpBackend.expectGET()
和复杂的查询参数进行测试时非常有用
{'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.