AngularJS提供了$resourceService來(lái)更方便地與RESTful服務(wù)進(jìn)行交互节芥,可以方便地定義一個(gè)REST資源破镰,而不必手動(dòng)聲明CRUD方法设预。
如何使用Resource舰褪?
具體步驟如下:
- 引入angular-resource.min.js文件
- 在模塊中依賴ngResourece,
- 在服務(wù)中注入$resource
示例代碼如下:
//定義
var Topic = angular.module('Topic',['ngResource']);
Topic.factory('topicResource',function($resource){
return $resource('/topic/:id',
{
id:'@id'
},
{
close:{
method:'POST',
params:{close:true},
isArray:false
}
}
);
});
//調(diào)用,對(duì)id為123的topic執(zhí)行close操作
topicResource.close({id:123}, successFn, errorFn)
$resource的參數(shù)說(shuō)明
$resource(url,{url參數(shù)},{自定義方法})
- url: 必填, 資源的基礎(chǔ)url急黎,url中帶有':'項(xiàng)的是根據(jù)第二個(gè)參數(shù)來(lái)進(jìn)行配置的健提。
- url參數(shù): 選填琳猫,配置url中的帶有':' 項(xiàng)的參數(shù)。例如: ('/card/user/:userID/:id', {userID:123,id:'@id'}), 那么userID會(huì)被配置為123.私痹。另外,在調(diào)用$resource()的方法的時(shí)候(比如get,query...),可以傳入?yún)?shù)覆蓋這里對(duì)url參數(shù)的配置脐嫂。
- 自定義方法: 選填,使用$resource獲取到的資源,或者通過(guò)$resource實(shí)例化的資源,資源本身會(huì)具有一些方法,比如$save,第三個(gè)參數(shù)用于給資源添加自定義的方法紊遵。
$resource的方法
$resource()默認(rèn)有如下5個(gè)方法:
- get: {method:'GET'} 一般用于獲取某個(gè)資源.
- query: {method:'GET',isArray:true},一般用于獲取一整套的資源,isArray參數(shù)账千,用以設(shè)置返回?cái)?shù)據(jù)格式,是否是數(shù)組暗膜。默認(rèn)是true匀奏。
- save: {method:'POST'},一般用于保存某個(gè)資源,有可能是新建的資源,也有可能是更新現(xiàn)有的資源
- remove: {method:'DELETE'},一般用于刪除某個(gè)資源
- delete: {method:'DELETE'} , 一般用于刪除某個(gè)資源
$resource的響應(yīng)方法
Resource.action([parameters], [success], [error])
- [parameters]: 可選. 一個(gè)json對(duì)象,用于配置url里的參數(shù),比如這里寫了{(lán)id:cardID},那么提交的請(qǐng)求url就是 '/card/user/123/cardID'. 可以不填,不填就直接按照$resource()里的url來(lái)提交,注意,不填的話,不需要給個(gè)空,可以直接寫success回調(diào),angular能夠判斷出它沒(méi)有填第一個(gè)參數(shù),而不是死板的按照順序來(lái)解讀參數(shù).
- [success]:可選. 請(qǐng)求成功后的回調(diào)函數(shù).回調(diào)接受2個(gè)參數(shù)(注意這里和$http有所不同)function(data, responseHeaders)
- [error]:可選. 請(qǐng)求失敗后的回調(diào).回調(diào)接受1個(gè)參數(shù) function(httpResponse){ }
注意:凡是通過(guò)$resource返回的對(duì)象,一定是json格式的,如果后臺(tái)返回的數(shù)據(jù)不是json,$resource也會(huì)按照自己的方式處理成json格式.不能返回null,因?yàn)?resource必須返回json格式,所以要返回{}
響應(yīng)轉(zhuǎn)換
有時(shí)基于既定的后臺(tái)設(shè)計(jì),無(wú)法提供完全RESTful的API学搜,比如返回的是一個(gè)分頁(yè)器對(duì)象娃善,而非數(shù)組。此時(shí)瑞佩,我們?nèi)匀豢梢允褂?resource聚磺,但需要設(shè)置響應(yīng)轉(zhuǎn)換回調(diào)。例如:
/*
API返回的是一個(gè)分頁(yè)對(duì)象炬丸,需要讀取其中的數(shù)組數(shù)據(jù)瘫寝。
{
currentPage : 1,
totalPage : 20,
pageSize : 2,
content : [
{
id : 1,
body : 'hello'
},
{
id : 2,
body : 'world'
}
]
}
*/
//定義
var Topics = $resouce('/topic/list/page/:pageid', null, {
page: {
method : 'GET',
transformResponse: function(data, headers){
var pager = JSON.parse(data);
return pager.content;
}
}
});
//調(diào)用
Topics.page(function(data){
//此時(shí)data已經(jīng)是轉(zhuǎn)換過(guò)的數(shù)組了
});
當(dāng)然上述轉(zhuǎn)換,也可以在響應(yīng)函數(shù)中進(jìn)行相關(guān)的數(shù)據(jù)格式處理稠炬。
類似響應(yīng)重寫焕阿,你還可以設(shè)置請(qǐng)求轉(zhuǎn)換transformRequest。