Javascript 从参数对象生成查询字符串

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

如何在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。我确实使用$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.