AngularJS $ http和$资源

我刚接触AngularJS,所以请原谅我的无知。

我有一些我想要调用的Web服务。 $resource$http ,我应该使用哪一个?

$resource :https://docs.angularjs.org/api/ngResource/service/$resource

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

在阅读上述两个API页面之后,我迷失了方向。

你能用简单的英语向我解释什么是不同的,我应该在什么情况下使用它们? 我如何构造这些调用并将结果正确读入js对象?


$http是用于通用AJAX的。 在大多数情况下,这是你将要使用的。 使用$http您将手动进行GETPOSTDELETE类型的调用并处理它们自己返回的对象。

$resource包装$http以用于RESTful Web API场景。


非常普遍地说:一个RESTful Web服务将是一个端点的数据类型的服务,它根据HTTP方法(如GETPOSTPUTDELETE等)执行与该数据类型不同的事情。因此,使用$resource ,您可以调用一个GET来获取作为JavaScript对象的资源,然后修改它并用POST发回它,甚至用DELETE删除它。

......如果这是有道理的。


我认为其他答案虽然正确,但并不能完全解释问题的根源: RESTHTTP一个子集。 这意味着所有可以通过REST完成的事情都可以通过HTTP完成,但并非所有可以通过HTTP完成的事情都可以通过REST完成。 这就是$resource内部使用$http原因。

那么,什么时候用对方?

如果你所需要的只是REST ,也就是说你试图访问一个RESTful web服务,那么$resource将使它与该web服务交互变得非常容易。

相反,如果您尝试访问任何不是RESTful Web服务的任何内容,那么您将不得不使用$http 。 请记住,您还可以通过$http访问RESTful web服务,但这比使用$resource更麻烦。 这是大多数人通过使用jQuery.ajax (相当于Angular的$http )在AngularJS之外完成的方式。


$http进行通用AJAX调用,其中通用意味着它可以包含RESTful API和非RESTful API。

$resource专门用于该RESTful部分。

Restful Api最近几年流行起来,因为url更好地组织起来,而不是由程序员组成的随机url。

如果我使用RESTful API来构建url,那么它就像/api/cars/:carId

$resource获取数据的方式

angular.module('myApp', ['ngResource'])

    // Service
    .factory('FooService', ['$resource', function($resource) {
        return $resource('/api/cars/:carId')
    }]);

    // Controller
    .controller('MainController', ['FooService', function(FooService){
        var self = this;
        self.cars = FooService.query();
        self.myCar = FooService.get('123');

    }]);

这会给你一个资源对象,这是伴随着自动getsavequeryremovedelete方法。

$http方式获取数据

angular.module('myApp', [])

    // Service
    .factory('FooService', ['$http', function($http){
        return {
            query: function(){
                return $http.get('/api/cars');
            },

            get: function(){
                return $http.get('/api/cars/123');
            }
            // etc...
        }

了解我们需要如何定义RESTFul API上的每个常用操作。 另一个区别是$http返回promise$resource返回一个对象。 还有第三方插件可以帮助Angular处理RESTFul API,如restangular


如果API类似于/api/getcarsinfo 。 所有留给我们的是使用$http

链接地址: http://www.djcxy.com/p/13641.html

上一篇: AngularJS $http and $resource

下一篇: Inject a factory in a controller in angular