我有一些想要调用的网络服务。$resource或$http,我应该使用哪个?
美元的资源:https://docs.angularjs.org/api/ngResource/service/美元的资源
美元美元http: https://docs.angularjs.org/api/ng/service/ http
在我读了上面的两个API页面后,我迷失了。
你能用通俗易懂的英语给我解释一下它们的区别,以及在什么情况下使用它们?我如何构造这些调用,并将结果正确地读入js对象?
我有一些想要调用的网络服务。$resource或$http,我应该使用哪个?
美元的资源:https://docs.angularjs.org/api/ngResource/service/美元的资源
美元美元http: https://docs.angularjs.org/api/ng/service/ http
在我读了上面的两个API页面后,我迷失了。
你能用通俗易懂的英语给我解释一下它们的区别,以及在什么情况下使用它们?我如何构造这些调用,并将结果正确地读入js对象?
当前回答
$resource服务目前不支持promise,因此与$http服务有明显不同的接口。
其他回答
$http是一个通用的AJAX调用,这意味着它可以包含RESTful api和非RESTful api。
$resource是专门用于该RESTful部分的。
Restful Api是近年来流行起来的,因为url是更好的组织,而不是由程序员随意创建的url。
如果我使用RESTful API来构造url,它将类似于/ API /cars/:carId。
获取数据的方式
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');
}]);
这将为您提供一个资源对象,并自动附带get、save、query、remove、delete方法。
获取数据的方式
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。
我能理解的是,如果要管理RESTFUL资源,使用$resource将允许您在代码中定义一次资源,并在资源上使用该资源进行多次操作。这增加了代码的可读性和可维护性。
如果你只是想有通用的调用,而不是像post, delete, update这样管理它,你可以使用$http或$resource(随你喜欢)。
$http用于通用AJAX。在大多数情况下,这是您将使用的。使用$http,您将手动进行GET, POST, DELETE类型调用,并自行处理它们返回的对象。
$resource包装了$http,用于RESTful web API场景。
一般来说:一个基于rest的web服务将是一个数据类型的服务端点,该服务基于HTTP方法(如GET、POST、PUT、DELETE等)对该数据类型执行不同的操作。因此,对于$资源,您可以调用GET以JavaScript对象的形式获取资源,然后更改它并使用POST将其发送回来,甚至使用delete删除它。
... 如果有道理的话。
当涉及到$http或$resource之间的选择时,从技术上讲,没有正确或错误的答案,本质上两者都会做同样的事情。
$resource的目的是允许您传入一个模板字符串(包含占位符的字符串)以及参数值。$resource将模板字符串中的占位符替换为作为对象传递的参数值。这在与RESTFul数据源交互时非常有用,因为它们使用类似的原则来定义url。
$http所做的是执行异步http请求。
$resource服务目前不支持promise,因此与$http服务有明显不同的接口。