2016-11-29 10 views
6

Używam strategii podciągania Lazy w podskładnikach w mojej aplikacji. Na najwyższym poziomie aplikacji mam niestandardowego dostawcę HTTP, który przechwytuje wszystkie wywołania ajax.Jak dostarczyć niestandardowego dostawcę do wszystkich leniwych załadowanych modułów

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

Moje leniwy załadowane moduły nie mają wpływu na tego niestandardowego dostawcę. Czy istnieje sposób, aby zapewnić to również dla nich? Bez duplikowania kodu we właściwości providers w pliku component.module. Dziękuję Ci!

+0

Chyba dodany do '' HttpModule' importu: [...] 'w co najmniej jednym z tych leniwych załadowanych modułów, prawo ? –

+0

@ GünterZöchbauer, nie. Z domyślnego tylko dla Angulara2 CommonModule – Mikki

+1

Powinien być dostarczony automatycznie, jeśli leniwy załadowany moduł go nie przesłania (zarejestrować dostawcę z tym samym kluczem): –

Odpowiedz

2

Naprawiłem to za pomocą @SkipSelf(). Każdy moduł Lazy-Load ma własny wtryskiwacz, więc nie wie nic o rozszerzonym dostawcy Http na poziomie aplikacji. Podczas wprowadzania dostawcy HTTP do usług (w modułach ładowanych z opóźnieniem) kątowy próbuje znaleźć dostawcę Http w module wtryskiwacza ... i znaleźć oryginalny z '@ kątowego/http'. Ale musisz znaleźć swojego rozszerzonego dostawcę Http, który jest "widoczny" na poziomie aplikacji. Więc spróbuj dodać @SkipSelf() przed HTTP w konstruktora:

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

constructor(@SkipSelf() private http: Http) { 
} 
Powiązane problemy