如何在AngularJS中用$ http替换$ resource?

时间:2014-04-21 03:50:13

标签: javascript angularjs

我的应用程序有以下$ resource调用。从我可以看到,这可以用$ http替换。

    $resource('/api/:et/', { et: $scope.data.entityType })
        .save(data, newSuccess, error)
        .$promise.finally(last);

    $resource('/api/:et/:id', { et: $scope.data.entityType })
        .delete({ id: entityId }, deleteSuccess, error)
        .$promise.finally(last);

    $resource('/api/:et/:id', { et: $scope.data.entityType }, { update: { method: 'PUT' } })
        .update({ id: entityId }, data, editSuccess, error)
        .$promise.finally(last);

我检查了$ http文档,但是我看不到如何添加对xxxSuccess的调用,错误函数以及如何执行。$ promise.finally(last)。

有人可以解释我如何使用$ http复制此功能吗?

2 个答案:

答案 0 :(得分:1)

$http用于通用AJAX。在大多数情况下,这就是您正在使用的内容。使用$http,您将GETPOSTDELETE手动键入调用并处理他们自己返回的对象。

$resource包装$http以用于RESTful Web API方案。


<强>语法

$http({
    method : 'GET',
    url : '/someUrl',
    param : { paramKey : paramValue}, // optional
    headers : 'someHeaders' // optional
    }).success(function(data, status, headers, config)
    {   
    // this callback will be called asynchronously
    // when the response is available
    }).error(function(data, status, headers, config)
    {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
    });

$ http文档 - https://docs.angularjs.org/#!/api/ng/service/$http


$ http

中维护承诺
app.factory('myService', function($http) {
      var myService = {
        async: function() {
          // $http returns a promise, which has a then function, which also returns a promise
          var promise = $http.get('/someUrl').then(function (response) {
            // The then function here is an opportunity to modify the response
            console.log(response);
            // The return value gets picked up by the then in the controller.
            return response.data;
          });
          // Return the promise to the controller
          return promise;
        }
      };
      return myService;
    });

    app.controller('MainCtrl', function( myService,$scope) {
      // Call the async method and then do stuff with what is returned inside our own then function
      myService.async().then(function(d) {
        $scope.data = d;
      });
    });

看看这篇文章 Angular Promises ,这肯定会让你有助于实现这样的场景。

答案 1 :(得分:0)

$ resource是$ http的进一步抽象版本。如果您已经使用$ response,您可能会发现更改逻辑以使用$ http没有用。那说 -

https://docs.angularjs.org/api/ng/service/$http

  

一般用法   $ http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回一个带有两个$ http特定方法的promise:成功和错误。

$http({method: 'GET', url: '/someUrl'}).
    success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
}).
error(function(data, status, headers, config) {
  // called asynchronously if an error occurs
  // or server returns response with an error status.
});