配置后向提供程序添加属性

时间:2015-06-24 17:00:50

标签: angularjs

我正在使用ng-flow,用servlet上传文件但是当我保护servlet时,我意识到我需要将令牌传递给头部,这样它才能工作并且安全。问题是ng-flow的设置是在.config框内的提供者上声明的。当我学会了很难的方法时,你可以在.config上注入东西,因为注入是在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;
            } ]);

我对角度很新,所以我正在寻找重新组合此代码的方法,以便我可以从用户添加令牌。

由于

1 个答案:

答案 0 :(得分:0)

我想我不明白究竟是什么问题但是:

实际上每个角度服务x都有 提供商功能 。此函数是构造函数,将由angular实例化,其结果可在名称为xProvider的配置块中注入。这个对象应该有一个特殊的$get函数,它实际上是服务的 factory ,这意味着当它被注入某个控制器时,它将被调用以获取服务的单个实例。 ,指令等是第一次。 所以你应该把角度服务想象成这样的函数:

function SomeServiceProvider(){
   this.$get = function SomeServiceFactory(){
   }
   this.someConfigurerFunction(){
   }
}

注册了provider API:

someModule.provider("someService", SomeServiceProvider);

和angular内部将执行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 ...),但它并没有改变这里描述的概念。