Как обеспечить пользовательский провайдер для всех ленивых загруженных модулей

Я использую стратегию отложенной загрузки субкомпонентов в своем приложении. На верхнем уровне приложения у меня есть собственный провайдер 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) {
}
Другие вопросы по тегам