AngularJS $ resource-无法将数组作为参数之一传递

标签 angularjs playframework-2.0

我试图将数组从AngularJS传递给我们的API。但是,发送后,参数将重复而不是作为数组发送。这是我的代码:

    angular.module('sigApp.services', ['ngResource']).
    // Fetch cases from server
    service('caseFetcher', ['$resource', function($resource) {
        this.getCases = function(params) {
            console.log('params: ',params);
            return $resource('/v1/cases/', params);
        };
    }]);

这是生成的URL(缩写):/v1/cases?status = OPEN&status = HELD

这是我想要的URL:/v1/cases?status%5B0%5D = OPEN&status%5B1%5D = HELD(又名?status [0] = OPEN&status 1 = HELD)

这是上面的代码中记录的对象的屏幕截图:

我尝试了最新版本的angularjs(1.2rc1),还尝试了Restangular插件。不管我尝试什么,我都会多次传递参数,而不是以数组格式传递。我们的API不能使用同一个键处理多个值。

有任何想法吗?

编辑:当另一个问题(AngularJS: ngResource and array of object as params to URL)根本不像这样时,有人将其标记为重复。另一个问题涉及通过POST发送数组,而我正在尝试执行GET请求(默认情况下设置为isArray:true),并且我只希望将数组中的一个参数传递为,这个答案似乎并没有帮我。那么有人可以帮忙吗?

更新我在下面回答了我自己的问题,但如已评论,我将为遇到此问题的任何人提供更多信息。我们正在后端使用Play Framework 2.1。我无法生成上面最初发布的带编号的数组,但能够使其仅在未索引的数组中工作,因此生成的URL最终可以工作:

/v1/cases?status%5B%5D = OPEN&status%5B%5D = HELD(又名?status [] = OPEN&status [] = HELD)

希望这对别人有帮助

最佳答案

我通过更改传递给$ resource的参数的设置方式解决了自己的问题。代替:

$scope.params.status = ['OPEN','HELD'];

我用了:
$scope.params["status[]"] = ['OPEN','HELD'];

这使我能够根据需要检索服务器上的值。

关于AngularJS $ resource-无法将数组作为参数之一传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18318714/

相关文章:

javascript - 为什么以下函数输入不适用于给定的 AngularJS 循环?

angularjs - 如何设置 Angularjs Controller ?匿名函数 vs $scope.init() vs View ng-init

javascript - 如何让 ui-sref 通过 element.append 动态工作?

Java/斯卡拉 : understanding Play framework custom tag or helper

javascript - HTTP.GET 不起作用

javascript - Angularjs 下拉验证不起作用

playframework - Play2 中的异步输入验证器

java.lang.illegalstateException : closed by using WSRequest : Play Java

multithreading - 当向服务器添加更多资源时,Play Framework会进行线程池扩展吗

playframework-2.0 - PlayFramework2 链接