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

根据我对
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
    });
  };

我错过了什么?

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

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

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

点赞