[AngularJS] AngularJS系列(6) 中級篇之ngResource


目錄

 

$http幾乎是所有ng開發中,都會用到的服務.本節將重點說下$http 與 ngResource

 

$http

使用:$http(config);

 

參數:

method:字符串,請求方法。

url:字符串,請求地址。

params:字符串或者對象,將使用paramserializer序列化並且作為GET請求的參數。

data:字符串或者對象,作為請求信息數據的數據。

headers:對象,字符串或者函數返回表示發送到服務器的HTTP請求頭。如果函數的返回值為空,則headers則不發送。函數接受一個配置對象作為參數。

xsrfHeaderName:字符串,填充XSRF令牌的HTTP請求頭名稱。

xsrfCookieName:字符串,含有XSRF令牌cookie的名字。

transformRequest:函數/函數的數組。轉換函數或者一個包含轉換函數的數組。轉換函數獲取http請求體和請求頭,並且返回他們的轉換版(通常是序列化)。

transformResponse:函數/函數的數組。轉換函數或者一個包含轉換函數的數組。轉換函數獲取http響應體和響應頭,並且返回他們的轉換版(通常是序列化)。

paramSerializer:字符串或者返回字符串的函數。用於編寫請求參數(指定為對象)的字符串表示形式的函數。如果指令是字符串,那么將被解釋為通過$injector注冊的函數,這意味着你能通過注冊服務方式創建你自己的序列化程序。默認的序列化是$httpParamSerializer;或者你可以使用$httpParamSerializerJQLike。

cache:boolean,如果為true,一個默認的$http緩存將被作為請求的緩存,否則如果存在一個用$cacheFactory創建的緩存實例,則將用於緩存。

timeout:數值,毫秒,超時則讓請求中止。

withCredentials:boolean,是否設置withcredentials flag的XHR對象。查看更多信息的憑據。

responseType:字符串,響應頭類型。

 

 

但通常我們這樣在ng中這樣使用http服務.

    angular.module('myApp', []).controller('helloCtrl', ['$http', function (http) {
            var url = '/index.html';
            http.get(url)
                .success(function (data, status, headers, config) {
                    console.log('請求內容:' + data);
                }).error(function (data) {
                    console.warn('請求錯誤:' + data);
                });
        }]);

  

我們也可以通過ng的promise實現.2者結果一致

            http.get(url)
                .then(function (rsp) {
                    debugger;
                    console.log('請求內容:' + rsp.data);
                }, function (rsp) {
                    console.warn('請求錯誤:' + rsp.data);
                });

 

在ng中,http服務還支持快捷方法有

createShortMethods('get', 'delete', 'head', 'jsonp')

createShortMethodsWithData('post', 'put', 'patch')

 

 

在方法createHttpBackend中,定義了ng http發送請求的核心代碼.

 

 

配置http

        angular.module('myApp', [], function ($httpProvider) {
            //為所有請求設置Auth頭
            $httpProvider.defaults.headers.common['Authorization'] = 'Bearer xx';
            //為所有GET請求設置DO NOT TRACK(默認情況下 get不在defaultheaders里)
            $httpProvider.defaults.headers.get = $httpProvider.defaults.headers.get || {};
            $httpProvider.defaults.headers.get['DNT'] = '1';
        })

 

 

 

ngResource

如果你的接口是RESTful類型的.ng推薦使用ngResource方式來處理.

Nuget:Install-Package AngularJS.Resource

 

定義resource

讓我們定義1個UserCard服務資源

            .factory('UserCardResource', ['$resource', function ($resource) {
                return $resource('/user/:userId/card/:cardId',
                    { userId: 12, cardId: '@id' },
                    { charge: { method: 'post', params: { charge: true }, isArray: false } });
            }])

  

 

這里說明一下$resource方法

參數1:  必須,為資源的URL地址

參數2:  可空,為URL地址默認值

參數3:  可空,為自定義資源方法

 

調用resource

開始調用我們創建的資源.(一般我們會把我們的資源定義成服務,這樣其他開發也能隨時調用)

.controller('helloCtrl', ['
UserCardResource
', '$scope', function (userCard, $scope) { var data = userCard.query(); $scope.data = data; }]);

這里調用了最簡單的query方法(不需要傳參數).

但是奇怪的是,我們不是在回調函數中拿到返回值的.

實際上,在這里會先給scope.data賦值一個空的引用對象.然后在拿到數據之后,由於是引用對象,自動同步到scope上.同時頁面也會刷新.

 

如果我們在拿到數據后做一些操作.也可以通過回調函數方式.

                userCard.query(function (data) {
                    //todo
                });

 

在ngResource中默認支持的方法及對應的HttpMethod

{ get: {method: 'GET'}, save: {method: 'POST'}, query: {method: 'GET', isArray: true}, remove: {method: 'DELETE'}, delete: {method: 'DELETE'} }

 

再說下特殊的save方法.(ngResource中 修改和保存共用save方法)

                userCard.save({ id: 1 }, card);//修改數據
                userCard.save({}, card);    //保存數據

 

當然我們也可以新建個方法update方法

            .config(['resourceProvider', function ($resourceProvider) {
                $resourceProvider.defaults.actions.update = {
                    method: 'PUT'
                };
            }])

 

(get remove delete比較簡單,不做詳細說明.)

 

這里再補充下isArray意義,指的是調用方法后返回的數據是數組還是單個js對象.一般query方法為數組.

 

 

本文地址:http://www.cnblogs.com/neverc/p/5920533.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM