$http
使得通用AJAX调用,其中一般意味着它可以包括的RESTful API加非RESTful API。
和$resource
是专门为那个RESTful部分。
Restful Api近年来流行,因为url更好地组织,而不是由程序员组成的随机url。
如果我使用REST风格的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');
}]);
这会给你一个resource object,这是自动伴有get
,save
,query
,remove
,delete
方法。
$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...
}
看看我们如何需要定义REST风格的API每个常见的操作。另一个区别是$http
返回promise
,而$resource
返回一个对象。也有第三方插件,帮助角处理REST风格的API像restangular
如果API是一样的东西/api/getcarsinfo
。所有离开我们是使用$http
。
$资源建立在$ http之上,并且提供了对底层通信的进一步抽象。它还需要一个符合$资源模式的REST终点。既然你问,我的建议是从$ http开始,熟悉,然后再看看你是否可以转向$资源。 –
感谢您的回答。那么,在什么情况下,$ http除了我可以熟悉api之外,更喜欢超过$资源? – Tom