Restangular getList,带有2个参数设置头而不是查询参数

时间:2014-09-26 18:03:55

标签: angularjs restangular

根据我对restangular docs的理解,调用Resource.getList('subElement',{query:param})应拨打/resource/subelement?query=param

我在rails API上使用Ransack,我试图传递一些搜索参数,其形式为“q [field_eq] = foo”。

这是一个控制器:

.controller('PlaypenCtrl', function PlaypenCtrl(
  $scope,
  Resource
) {
  'use strict';

  var qParams;

  $scope.doIt = function() {
    qParams = {
      per_page: 10
    };
    qParams['q[some_field_eq]'] = 'foo';
    console.log(qParams); //Object {per_page: 10, q[some_field_eq]: "foo"}

    Resource.getList('subElement',qParams).then(function(list){
      console.log(list);
    });

  };
});

当我打电话给doIt时,会记录下来:

Error: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'q[some_field_eq]' is not a valid HTTP header field name.

这是有道理的,因为很明显,这不是有效的HTTP头字段名称。

问题是......为什么Restangular会尝试将qParams对象放入请求标头中?根据文档,这些应该是请求参数。

如果我拿出'subElement',事情会按预期运作:

  $scope.doThat = function() {
    qParams = {
      per_page: 10
    };
    qParams['q[some_field_eq]'] = 'foo';
    console.log(qParams); //Object {per_page: 10, q[some_field_eq]: "foo"}

    Resource.getList(qParams).then(function(list){ 
      //calls /resource?per_page=10&q%5Bsome_field_eq%5D=foo
      console.log(list); //...a normal restangular list object, as expected
    });
  };

我错过了什么?

1 个答案:

答案 0 :(得分:2)

getList方法的两个参数是查询参数和标题。要访问subElement端点,您必须使用以下内容:

Resource.all('subElement').getList(qParams)

我相信这就是你要找的东西。