AngularJs将$http POST转换为$resource POST

AngularJs将$http POST转换为$resource POST,angularjs,angular-resource,Angularjs,Angular Resource,我正在寻找一个关于如何使用$resource发布数据的示例。我目前使用$http编写了这段工作代码,但希望使用$resource简化它 return $http.post("http://localhost:8080/calculate", JSON.stringify(formData)) .then(function (response) { if (typeof response.data === 'object') {

我正在寻找一个关于如何使用$resource发布数据的示例。我目前使用$http编写了这段工作代码,但希望使用$resource简化它

return $http.post("http://localhost:8080/calculate", JSON.stringify(formData))
               .then(function (response) {
                    if (typeof response.data === 'object') {
                        return response.data;
                    } else {
                        // invalid response
                        return $q.reject(response.data);
                    }
                }, function (response) {
                    // something went wrong
                    return $q.reject(response.data);
                });

我试着四处搜索示例,但没有找到任何适合这种情况的示例。

首先为Calculate创建$resource类表示,如前所示

此资源类有一个保存函数,允许您根据需要发布数据

angular.module('myApp.services').factory('Calculate', function($resource) {
  return $resource('http://localhost:8080/calculate');
});

angular.module('myApp.controllers').controller('ResourceController',function($scope, Calculate) {
  $scope.calc = new Calculate(); //You can instantiate resource class

  $scope.calc.data = JSON.stringify(formData);

  Calculate.save($scope.calc, function() {
      // Callback function to run once the data is saved.
  });
});

首先为Calculate创建$resource类表示,如前所示

此资源类有一个保存函数,允许您根据需要发布数据

angular.module('myApp.services').factory('Calculate', function($resource) {
  return $resource('http://localhost:8080/calculate');
});

angular.module('myApp.controllers').controller('ResourceController',function($scope, Calculate) {
  $scope.calc = new Calculate(); //You can instantiate resource class

  $scope.calc.data = JSON.stringify(formData);

  Calculate.save($scope.calc, function() {
      // Callback function to run once the data is saved.
  });
});

如下定义您的资源:

angular.module('app')
.factory('MyResource', function ($resource) {
  return $resource('', {}, {
    'calculate': { method: 'POST', url: 'http://localhost:8080/calculate' }
  });
});
或者这个:

angular.module('app')
.factory('MyResource', function ($resource) {
  return $resource('http://localhost:8080/calculate', {}, {
    'calculate': { method: 'POST' }
  });
});
然后你可以使用它:

MyResource.calculate({}, JSON.stringify(formData), onSuccess, onError);
使用第一种方法,您可以在单个资源(
url
property)中使用不同的url定义不同的操作,这有时很有用,尤其是当您使用的API不统一时

当您有相同的端点和不同的请求方法时,第二种方法更好(就像在常规RESTfull API中一样)。在那里,您可以使用不同的名称定义它们(如get、update、delete等)

您还可以通过以下方式使用资源:

var result = MyResource.calculate(JSON.stringify(formData));
还可以访问内部
$promise
,这样您就可以做一些更复杂的事情

根据我的经验,重要的是,当API返回JSON数组时,您应该记住
isArray:true
属性


此处描述了所有详细信息:

如下定义您的资源:

angular.module('app')
.factory('MyResource', function ($resource) {
  return $resource('', {}, {
    'calculate': { method: 'POST', url: 'http://localhost:8080/calculate' }
  });
});
或者这个:

angular.module('app')
.factory('MyResource', function ($resource) {
  return $resource('http://localhost:8080/calculate', {}, {
    'calculate': { method: 'POST' }
  });
});
然后你可以使用它:

MyResource.calculate({}, JSON.stringify(formData), onSuccess, onError);
使用第一种方法,您可以在单个资源(
url
property)中使用不同的url定义不同的操作,这有时很有用,尤其是当您使用的API不统一时

当您有相同的端点和不同的请求方法时,第二种方法更好(就像在常规RESTfull API中一样)。在那里,您可以使用不同的名称定义它们(如get、update、delete等)

您还可以通过以下方式使用资源:

var result = MyResource.calculate(JSON.stringify(formData));
还可以访问内部
$promise
,这样您就可以做一些更复杂的事情

根据我的经验,重要的是,当API返回JSON数组时,您应该记住
isArray:true
属性


此处描述了所有详细信息:

有示例代码演示此示例代码演示此示例代码我能够得到此答案,但必须完全限定calculate中的url属性,因为这会覆盖资源url。如果没有此更改,所有请求都将转到与web应用相同的主机和端口。对不起,我的错误。我很快地写下了这个答案,没有做任何改变来测试它,但我忘记了这一点。我已经更新了答案。我能够得到这个答案,但必须完全限定calculate中的url属性,因为这会覆盖资源url。如果没有此更改,所有请求都将转到与web应用相同的主机和端口。对不起,我的错误。我很快地写下了这个答案,没有做任何改变来测试它,但我忘记了这一点。我已经更新了答案。我无法让它工作。该服务总是收到一个空的请求正文。我无法使其工作。服务总是得到一个空的请求主体。