Как обеспечить пользовательский провайдер для всех ленивых загруженных модулей
Я использую стратегию отложенной загрузки субкомпонентов в своем приложении. На верхнем уровне приложения у меня есть собственный провайдер HTTP, который перехватывает все вызовы ajax.
providers:[{
provide: Http,
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions, cookieService: CookieService) => new CustomHttp(backend, defaultOptions, cookieService),
deps: [XHRBackend, RequestOptions, CookieService]
}]
Мои лениво загруженные модули не влияют на этот пользовательский провайдер. Есть ли способ предоставить это им тоже? Без дублирования кода в providers
свойство в файле component.module. Спасибо!
1 ответ
Я исправил это с помощью @SkipSelf(). Каждый модуль с отложенной загрузкой имеет собственный инжектор, поэтому он ничего не знает о расширенном провайдере Http на уровне приложения. Пока вы внедряете Http-провайдера в свои службы (в лениво-загруженных модулях), angular пытается найти Http-провайдера в инжекторе модуля... и найти его в "@angular/http". Но вам нужно найти расширенного провайдера Http, который "виден" на уровне приложения. Поэтому попробуйте добавить @SkipSelf() перед Http в вашем конструкторе:
import { SkipSelf } from '@angular/core';
constructor(@SkipSelf() private http: Http) {
}