我正在使用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;
} ]);
我对角度很新,所以我正在寻找重新组合此代码的方法,以便我可以从用户添加令牌。
由于
答案 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时,例如factory
或service
:
someModule.factory("anotherService", function AnotherServiceFactory(){
// code for creating service
});
仅使用$get
函数为您生成提供程序函数,因此您没有看到提供程序函数,但仍然存在服务的提供程序函数,如下所示:
function AnotherServiceProvider(){
this.$get = AnotherServiceFactory;
}
并且它被用作构造函数来实例化anotherServiceProvider
,它可以在配置块中注入。
您可以在angular documentations for $provide和angular documentations for module API
中找到有关角度服务的良好信息decorators
拦截服务的创建,并使服务按您的需要工作。new ...
),但它并没有改变这里描述的概念。