angular $resource模塊

http://www.cooklife.cn/detail/54c643a6c93620284e964b59#View

上一篇中講到使用$http同服務器進行通信,但是功能上比較簡單,angularjs還提供了另外一個可選的服務$resource,使用它可以非常方便的同支持restful的服務單進行數據交互。

安裝

ngResource模塊是一個可選的angularjs模塊,如果需要使用,我們要單獨引用js


<script type="text/javascript" src="/javascripts/angular-resource.js">

應用$resource

我們並不是直接通過$resource服務本身同服務器通信,$resource是一個創建資源對象的工廠,用來創建同服務端交互的對象。

var User = $resource('/api/users/:userId', {userId:'@id'});

返回的User對象包含了同後端服務進行交互的方法,我們可以把User對象理解成同RESTFul的後端服務進行交互的接口。

該對象包含兩個get類型的方法已經三個非get類型的方法。

User.get({id:'123'}, successFn, errorFn);

該方法向url發送一個get請求,並期望一個json類型的響應。這裏會向/api/users/123發送一個請求,successFn處理請求成功響應,errorFn處理錯誤。


User.query(params, successFn, errorFn)

同get()方法使用類似,一般用來請求多條數據。


save(params, payload, successFn, errorFn);

save方法會發起一個post請求,params參數用來填充url中變量,對象payload會作爲請求體進行發送


delete(params, payload, successFn,errorFn)

delete方法一個DELETE請求,payload作爲消息體進行發送


remove(params, payload, successFn, errorFn)

同delete類似,不同的是remove用來移除多條數據


通過$resource生成的對象來同服務器進行交互的時候,我們看可以定義處理成功以及處理失敗的函數,這些函數接受的參數不僅僅是簡單的對象,而是經過包裝之後的對象,會被添加$save(), $remove(), $delete三個方法,可以直接調用這三個方法來後服務端進行交互。

User.get({id:'123'}, function(user){
  user.name = 'changeAnotherName';
  user.$save();
//這裏等價於User.save({id:'123'},{name:'changeAnotherName'})
});

擴展$resource

$resource對常見的五種請求進行封裝,我們還可以對$resource進行擴展。

這裏要擴展$resource我們需要傳入第三個參數,該參數是一個對象。

$resource('/api/users',{},{
  sendEmail:{
    method:'',
    url:'',
    params:{},
    isArray:boolean,
    transformRequest:函數或者函數數組
    transformResponse:函數或者函數數組
    cache:布爾型或緩存對象
    timeout:數值或promise對象
    withCredentials:布爾類型
    responseType:字符串,用來設置XMLHttpRequestResponseType屬性
  }
})
我們也可以將$resource服務當做自定義服務的基礎。

angular.module('testApp', ['ngResource']),factory('UserService',['$resource', function($resource){

    return $resource(url,{},{});

}]);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章