首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在config之后向提供程序添加属性

在config之后向提供程序添加属性
EN

Stack Overflow用户
提问于 2015-06-25 01:00:50
回答 1查看 231关注 0票数 0

我使用ng-flow通过servlet上传文件,但是当我保护servlet时,我意识到我需要将令牌传递到头文件,这样它才能工作并且安全。问题是ng-flow的设置是在.config框内的提供者上声明的。正如我所学到的那样,你不能在.config上注入东西,因为注入是在配置之后创建的。

代码语言:javascript
复制
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;
            } ]);

我对angular真的很陌生,所以我正在寻找一种重新组装这段代码的方法,这样我就可以添加来自我的用户的令牌。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-06-25 01:34:17

我想我不明白到底是什么问题,但是:

实际上,每个角度服务x都有一个提供程序函数。此函数是一个构造函数,将由angular实例化,其结果可在名为xProvider的配置块中注入。这个对象应该有一个特殊的$get函数,它实际上是服务的工厂,这意味着当它第一次被注入到一些控制器、指令等中时,它将被调用来获取服务的单个实例。因此,您应该将angular服务看作如下所示的函数:

代码语言:javascript
复制
function SomeServiceProvider(){
   this.$get = function SomeServiceFactory(){
   }
   this.someConfigurerFunction(){
   }
}

注册到provider接口:

代码语言:javascript
复制
someModule.provider("someService", SomeServiceProvider);

angular将在内部执行类似new SomeServiceProvider()的代码,并将其保存在名为someServiceProvider的配置块中,并使其可注入。此外,当您第一次在指令、控制器等中请求"someService“时,注入器将调用类似new someServiceProvider.$get()的内容,将其结果返回给您,并将其保存在注册表中以供进一步注入。

当您使用其他更高级的angular模块API时,如factoryservice,如下所示:

代码语言:javascript
复制
someModule.factory("anotherService", function AnotherServiceFactory(){
    // code for creating service
});

provider函数是为您生成的,只有一个$get函数,所以您看不到provider函数,但仍然有一个用于您的服务的provider函数,如下所示:

代码语言:javascript
复制
function AnotherServiceProvider(){
    this.$get = AnotherServiceFactory;
}

它被用作构造函数来实例化可注入到配置块中的anotherServiceProvider

您可以在angular documentations for $provideangular documentations for module API中找到有关angular服务的详细信息

附注:

  • 好的服务通常附带一个提供程序,使您能够配置服务,但如果没有提供程序,您仍然可以使用decorators截获服务的创建,并使服务按您希望的方式工作。
  • 实例化对象(如服务)的过程与我在这里所说的(我的意思是new ...)不完全一样,但它不会改变这里描述的概念。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31032689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档