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

标签 angular angular2-providers

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

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

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

最佳答案

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

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

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

关于angular - 如何为所有延迟加载的模块提供自定义提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40873480/

相关文章:

angular - 异常 : No provider for Headers!(应用程序 -> Api -> header )

javascript - 如何全局导入angular2中的Javascript库

html - 如何将图像从 App 组件绑定(bind)到 Angular 2 中的 HTML 文件

Angular v4 : Search by name with observable

javascript - 阅读单选按钮值 - Angular 2

angular - 可观察的行为主体服务 - 单例和提供者

angular - 没有 RuntimeCompiler 的运行时提供程序

angular - 如何捕获 Angular 2 中的内联模板错误?

javascript - 如何跟踪 Angular 项目中的 `EmptyError: no elements in sequence` 错误

javascript - 如何将提供程序添加到 Angular 2 中的服务类?