Angular $ resource:使用POST使用自定义方法丢失对象ID

时间:2016-04-14 13:30:51

标签: angularjs api post request angular-resource

我想在我的Foo Factory中使用自定义方法进行POST调用。当我将其称为GET请求时,它可以正常工作,但是它被我的api拒绝,因为它不允许 GET 用于该方法。

Request: GET /api/foo/272ee694-b517-4012-b740-98f76973091d/custom_method/ 405

当我将方法更改为 POST (在角度工厂中)时,对象ID消失:

Request: OPTIONS /api/foo/custom_method/ 174

Request: POST /api/foo/custom_method/ 405

请注意,这次OPTION请求之前没有id。

我的工厂看起来像:

appService.factory('foo', ['$resource', 'appConfig',
  function($resource, appConfig){

    var api_path = appConfig.api_path;

    return $resource(api_path + 'foos/:fooId/', {fooId:'@id'},{
      query: {
        method: 'GET',
        isArray: false
      },
      customMethod: {
        method: 'POST',
        url: api_path + 'foos/:fooId/custom_method/'
      }
    });
  }]);

我的控制器:

$scope.foo = foo.get({fooId: $routeParams.fooId});

$scope.customMethod = function() {
    foo.customMethod({fooId:$scope.foo.id});
}

有人可以帮助我吗?提前谢谢

1 个答案:

答案 0 :(得分:0)

所以,我找到了解决方案。在控制器中,只需使用StringBuilder b = new StringBuilder (s.length()+estimated_expansion); // this estimate doesn't have to be correct, but if it is high enough // without being *much* too high performance is optimized for(int i = 0; i < array.length; i++ ){ b.append(tokens[i]).append(array[i]); } s = b.append(tokens[array.length]).toString(); 从对象中调用custom_method即可。像这样:

$

您也可以省略传递id,因为$ resource默认从对象获取它。