Angular $ resource POST整个对象,而不仅仅是传递给它的属性

时间:2016-01-22 18:50:00

标签: angularjs angular-resource

我正在使用Angular的$资源与API进行交互,并在该资源上创建自定义方法。其中一种方法是POST,当我尝试使用它时,它会发送整个资源,而不仅仅是我试图发布到API的属性。我不认为这是$ resource服务的预期行为,但是,我可能会遗漏一些东西。

以下是代码:

服务:

angular.module('adminApp')
  .factory('Framework', function($resource) {
    return $resource('/api/frameworks/:id', {id: '@id'}, {
      'update': {
        method: 'PUT'
      },
      'getRequiredLicenses': {
        method: 'GET',
        url: '/api/frameworks/:id/required_licenses',
        isArray: true
      },
      'addRequiredLicenses': {
        method: 'POST',
        url: '/api/frameworks/:id/required_licenses'
      },
      'removeRequiredLicense': {
        method: 'DELETE',
        url: '/api/frameworks/:id/required_licenses/:license_id'
      }
    });
  });

我在说它的地方:

scope.addLicensesToFramework = function() {
  scope.framework.$addRequiredLicenses(null, {
    required_licenses: Object.keys(scope.selectedLicenses) // returns an array of ints
  });
}

(请注意,这是一个指令。scope.framework是框架资源的实例)

发送此请求时,以下是有效负载中包含的内容:

我的意图是只在有效负载中传递{'required_licenses': [12345,1236]},而我似乎无法弄清楚为什么它将整个资源作为正文发送。 (事实上​​,它根本不发送,只发送原始资源)

任何见解都会非常有用,谢谢!

1 个答案:

答案 0 :(得分:0)

尝试这样称呼:

scope.addLicensesToFramework = function() {
  scope.framework.$addRequiredLicenses({
    required_licenses: Object.keys(scope.selectedLicenses),
    id: 1234
  }, function(resp){ console.log(resp) });
}

还要注意我在参数对象中包含了id ..你可能需要它。