2016-01-31 86 views
1

假設所有我的REST API的需要接受下列參數:
1)參數1
2)參數2在每個HTTP請求添加常用參數

這將是乏味的,我要實現這種方式(指代碼如下)。 此外,它藐視DRY的概念。我在尋找的是一個全局配置,它允許默認參數與http請求一起傳遞。

我相信$ httpProvider是最接近我能得到(因爲它可以定義Cookie的到期時間,標題等全球範圍內),但似乎我無法找到利用它來傳遞參數的方式。

angular.module('myApp.services').factory('Entry', function($resource) { 
    return { 
     method1: $resource('/api/entries/:id/:param1/:param2', 
     { id: '@_id', param1:'@param1', param2: '@param2'}, { 
     update: { 
      method: 'PUT' // this method issues a PUT request 
     } 
     }), 
     method2: $resource('/api/entries2/:param1/:param2', 
     {param1:'@param1', param2: '@param2'}, { 

     }) 
}); 

我希望從最終優化代碼中得到類似的結果。

angular.module('myApp.services').config($httpProvider){ 
    $httpProvider.defaults.param('param1'); 
    $httpProvider.defaults.param('param2'); 
} 


angular.module('myApp.services').factory('Entry', function($resource) { 
    return { 
     method1: $resource('/api/entries/:id/', 
     { id: '@_id' }, { 
     update: { 
      method: 'PUT' // this method issues a PUT request 
     } 
     }), 
     method2: $resource('/api/entries2'), 
     {}, { 

     }) 
}); 
+0

查找到$ HTTP攔截器:https://docs.angularjs.org/API/NG /服務/ $ HTTP#攔截 –

回答

1

您必須創建一個攔截器服務,然後將攔截器添加到您的app.config()中的$ httpProvider。

創建攔截服務:

angular.module('app').factory('myInterceptorService', myInterceptorService); 

function myInterceptorService(){ 
    var param1,param2; 
    return{ 
     request: requestInterceptor, 
     setParams: setParams 
    }; 
    function requestInterceptor(config){ 
     config.params.push(param1); 
     config.params.push(param2); 
     return config; 
    } 
    function setParams(p1,p2){ 
     param1=p1; 
     param2=p2; 
    } 
} 

要使用應用程序配置寄存器,添加$ httpProvider到的app.config

app.config([...,'$httpProvider'...){ 
    $httpProvider.interceptor.push('myInterceptorService'); 
}