我在我的应用程序中使用子组件的延迟加载策略。在应用程序的顶层,我有拦截所有 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/