2015-06-24 35 views
0

我正在使用ng-flow,用servlet上傳文件,但因爲我正在保護servlet我意識到我需要將令牌傳遞到標題,所以它會工作和安全。問題在於ng-flow的設置是在.config框內的provider上聲明的。而且,當我學會了很難的方法時,你不能在.config上注入東西,因爲注入是在配置後創建的。添加一個屬性到提供商後配置

angular.module('UploadModule', [ 'ngResource','flow' ,'AuthModule']).config(
       [ 'flowFactoryProvider',function(flowFactoryProvider,$provide) { 
        //AuthService.getKeycloak(); 

        flowFactoryProvider.defaults = { 
        target : '/ng-flow-java/upload', 
        permanentErrors : [ 500, 501 ], 
        maxChunkRetries : 1, 
        chunkRetryInterval : 5000, 
        simultaneousUploads : 4, 
        progressCallbacksInterval : 1, 
        withCredentials : true, 
        method : "octet", 
        headers : {'Authorization', 'Bearer + ' token} 
       }; 
       flowFactoryProvider.on('catchAll', function(event) { 
        console.log('catchAll', arguments); 
       }); 
       // Can be used with different implementations of Flow.js 
       // flowFactoryProvider.factory = fustyFlowFactory; 
      } ]); 

我真的很新的角度,所以我在尋找一種方式重組這個代碼,所以我可以從我的用戶添加的標記。

感謝

回答

0

我想我不明白,究竟是什麼問題,但:

其實每個角服務x提供商功能。這個函數是一個構造函數,它將被角度實例化,其結果是可以在配置塊中注入,名字爲xProvider。這個對象應該有一個特殊的$get函數,它實際上是服務的工廠,這意味着它將被調用來獲取服務的單個實例,當它被首次注入某個控制器,指令等時。 所以,你應該想到的角度服務爲這樣的功能:

這與 provider API註冊
function SomeServiceProvider(){ 
    this.$get = function SomeServiceFactory(){ 
    } 
    this.someConfigurerFunction(){ 
    } 
} 

someModule.provider("someService", SomeServiceProvider); 

和國內的角度將執行類似new SomeServiceProvider()並保存,並使得在名爲someServiceProvider的配置塊中注射。此外,當您在指令,控制器等中首次詢問「someService」時,注射器會調用類似new someServiceProvider.$get()的東西,將結果返回給您,並將其保存在註冊表中以便進一步注射。

當您使用其它更高級別的角模塊的API,像factoryservice這樣的:

someModule.factory("anotherService", function AnotherServiceFactory(){ 
    // code for creating service 
}); 

爲您生成只用$get功能的提供者的功能,所以你看不到提供商功能,但仍有爲您服務這樣一個提供功能:

function AnotherServiceProvider(){ 
    this.$get = AnotherServiceFactory; 
} 

而且它作爲構造函數來實例anotherServiceProvider這是在配置塊注射。

可以在angular documentations for $provideangular documentations for module API

旁註瞭解角服務良好的信息:

  • 良好的服務通常會與供應商,使您可以配置服務,但如果沒有,你還可以用decorators攔截服務的創建,並使服務按照您的要求工作。
  • 實例化服務對象的過程並不完全像我在這裏所說的(我的意思是new ...),但它不會改變這裏描述的概念。
+0

只要被告知和在我的測試中,你不能在.config上。即使在你的評論中它說,它不是注入配置塊。我很抱歉地問你,是否可以將我發佈的代碼更改爲剛發佈的格式? –

+0

你包含的代碼非常有效。您**可以**將服務提供商注入到配置塊中。只要去設置'FactoryProvider.defaults.headers'到你想要的,它應該工作。我要編輯我的答案來演示發生了什麼。 –

相關問題