ngResource模塊是一個可選的angularjs模塊,若是須要使用,咱們要單獨引用jsjavascript
<script type="text/javascript" src="/javascripts/angular-resource.js"></script>
咱們並非直接經過$resource服務自己同服務器通訊,$resource是一個建立資源對象的工廠,用來建立同服務端交互的對象。html
var User = $resource('/api/users/:userId', {userId:'@id'});
返回的User對象包含了同後端服務進行交互的方法,咱們能夠把User對象理解成同RESTFul的後端服務進行交互的接口。java
該對象包含兩個get類型的方法已經三個非get類型的方法。angularjs
User.get({id:'123'}, successFn, errorFn);
該方法向url發送一個get請求,並指望一個json類型的響應。這裏會向/api/users/123發送一個請求,successFn處理請求成功響應,errorFn處理錯誤。json
User.query(params, successFn, errorFn)
同get()方法使用相似,通常用來請求多條數據。後端
save(params, payload, successFn, errorFn);
save方法會發起一個post請求,params參數用來填充url中變量,對象payload會做爲請求體進行發送api
delete(params, payload, successFn,errorFn)
delete方法一個DELETE請求,payload做爲消息體進行發送數組
remove(params, payload, successFn, errorFn)
同delete相似,不一樣的是remove用來移除多條數據promise
經過$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('/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,{},{}); }]);
.