如何为所有延迟加载的模块提供自定义提供程序

时间:2016-11-29 18:46:57

标签: angular angular2-providers

我在我的应用程序中使用子组件的延迟加载策略。在应用程序的顶层,我有自定义HTTP提供程序,它拦截所有ajax调用。

    providers:[{
        provide: Http,
        useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, cookieService: CookieService) => new CustomHttp(backend, defaultOptions, cookieService),
        deps: [XHRBackend, RequestOptions, CookieService]
    }]

我的延迟加载模块不会影响此自定义提供程序。有没有办法为他们提供?没有在component.module文件的providers属性中重复代码。谢谢!

1 个答案:

答案 0 :(得分:2)

我用@SkipSelf()修复了它。 每个延迟加载的模块都有自己的注入器,因此它对应用程序级别中的扩展Http提供程序一无所知。当您在服务中注入Http提供程序时(在延迟加载的模块中),angular正在尝试在模块的注入器中找到Http提供程序...并从'@ angular / http'中找到原始提供程序。但是您需要找到在应用程序级别内“可见”的扩展Http提供程序。 因此,在构造函数中尝试在Http之前添加@SkipSelf():

import { SkipSelf } from '@angular/core';

constructor(@SkipSelf() private http: Http) {
}