AngularJs将$ http POST转换为$ resource POST

时间:2015-12-14 18:16:07

标签: angularjs angular-resource

我正在寻找一个关于如何使用$ 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);
                });

我试图搜索示例,但未找到适合此情况的任何内容。

2 个答案:

答案 0 :(得分:2)

首先为Calculate创建$ resource类表示,如第一个所示。

此资源类具有保存功能,允许您根据需要POST数据。

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.
  });
});

答案 1 :(得分:1)

像这样定义您的资源:

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属性)中使用不同的URL定义不同的操作,这有时很有用,尤其是当您使用的API不统一时。

当您拥有相同的端点和各种请求方法时(如常规RESTfull API),第二种方法会更好。在那里你可以用不同的名字定义它们(比如get,update,delete等)。

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

var result = MyResource.calculate(JSON.stringify(formData));

也可以访问内部$promise,以便您可以执行更复杂的操作。

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

此处描述了所有详细信息:https://docs.angularjs.org/api/ngResource/service/$resource