AngularJS $ http和$ resource

2020/10/09 10:01 · javascript ·  · 0评论

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

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

$httphttps : //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

...如果有道理。

我认为其他答案虽然正确,但并不能完全解释问题的根源:REST是的子集HTTP这意味着可以通过完成的所有操作REST都可以通过完成,HTTP但是不能通过完成的所有操作HTTP都可以通过完成REST这就是为什么在内部$resource使用$http

那么,何时互相使用?

如果您只需要REST,也就是说,您正在尝试访问RESTfulWeb服务,$resource则将使其与该Web服务的交互变得非常容易。

相反,如果您尝试访问不是RESTfulWeb服务的任何内容,则必须使用$http请记住,您还可以RESTful通过来访问Web服务$http,这将比使用麻烦得多$resource这是大多数人在AngularJS之外通过使用jQuery.ajax(等效于Angular的$http)进行此操作的方式。

$http使得通用的AJAX调用,其中一般意味着它可以包括基于REST的API加上非RESTful API。

并且$resource专门针对该RESTful部分。

近年来,Restful Api盛行是因为URL的组织性更好,而不是程序员编写的随机URL。

如果我使用RESTful API来构建网址,则将类似于/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

我想答案更多地取决于谁,你是在你写代码的时间。如果您不熟悉Angular,请使用$http它,直到您知道为什么需要$resource除非您对如何$http阻碍自己有具体的经验,并且了解$resource代码中使用的含义,否则请坚持使用$http

这是我的经验:我开始了我的第一个Angular项目,我需要向RESTful接口发出HTTP请求,所以我做了与现在相同的研究。根据我在此类问题中阅读的讨论,我选择了$resource我希望这是我可以消除的错误。原因如下:

  1. $http示例很多,很有帮助,并且通常只是您需要的。$resource缺乏清晰的例子,而且(以我的经验)几乎不需要您所需的一切。对于Angular新手,直到后来陷入困惑的文档并为找不到$resource帮助您的有用示例而烦恼时,您才意识到选择的含义
  2. $http可能是您要寻找的一对一思维导图。您无需学习新概念即可了解所获得的东西$http$resource带来了很多细微差别,您还没有心智图。
  3. 糟糕,我是否说您不必学习新概念?作为一个新手角度,你必须学习的承诺。$http返回一个诺言并.then能够实现,因此它正好适合您正在学习的有关Angular和诺言的新知识。$resource不会直接返回承诺,这会使您对Angular基础知识的初步了解变得复杂。
  4. $resource之所以强大,是因为它压缩了RESTful CRUD调用的代码以及输入和输出的转换。如果您厌倦了重复编写代码来处理$http自己的结果,那就太好了对于其他任何人,都$resource增加了一个令人困惑的语法和参数传递的神秘层。

我希望我三个月前认识我,然后我会很强力地对自己说:“和$http孩子们呆在一起。很好。”

我认为必须强调$ resource期望对象或数组是服务器的响应,而不是原始字符串。因此,如果您有原始字符串(或对象和数组以外的任何字符串)作为响应,则必须使用$ http

在选择之间$http或从$resource技术上来讲,实质上没有对或错的答案,两者都会做同样的事情。

的目的$resource是允许您传递模板字符串(包含占位符的字符串)以及参数值。$resource会将模板字符串中占位符替换为作为对象传递的参数值。与RESTFul数据源进行交互时,这非常有用,因为它们使用类似的原理来定义URL。

什么$http是执行异步HTTP请求。

资源服务只是使用REST APSI的有用服务。使用它时,您无需编写CRUD方法(创建,读取,更新和删除)

据我所知,资源服务只是一个捷径,您可以使用http服务执行任何操作。

在$ http上使用$ resource时,我注意到的一件事是,如果您在.net中使用Web API

$ resource绑定到一个执行单一目的的控制器中。

$ resource('/ user /:userId',{userId:'@ id'});

[HttpGet]
public bool Get(int id)
{
    return "value"
}

public void Post([FromBody]string value)
{
}

public void Put(int id, [FromBody]string value)
{
}

public void Delete(int id)
{
}

虽然$ http可以是任何东西。只需指定网址即可。

$ http.get-“ api / authenticate”

[HttpGet]
public bool Authenticate(string email, string password)
{
    return _authenticationService.LogIn(email, password, false);
}

这只是我的意见。

$ resource服务当前不支持promise,因此与$ http服务具有明显不同的接口。

我能理解的是,如果您要管理RESTFUL资源,使用$resource将使您可以在代码中一次定义资源,并将该资源用于对该资源的多次操作。这增加了代码的可读性和可维护性。

如果您只想拨打通用电话而不要像发帖,删除,更新那样对其进行管理,则可以使用$http$resource(根据需要)。

本文地址:http://javascript.askforanswer.com/angularjs-httphe-resource.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!