2017-11-28 2 views
1

Ich habe ein Angular 5-Projekt erstellt und eine Factory erstellt, die Metadaten aus dem Service vor dem Start der Anwendung bereitstellen sollte. Das Problem ist, dass ich Fehler:Angular "Maximale Call-Stack-Größe überschritten" bei Verwendung des Injektors

RangeError: Maximum call stack size exceeded 
    at resolveNgModuleDep (core.js:10559) 
    at _callFactory (core.js:10649) 
    at _createProviderInstance$1 (core.js:10599) 
    at resolveNgModuleDep (core.js:10581) 
    at _createClass (core.js:10622) 
    at _createProviderInstance$1 (core.js:10596) 
    at resolveNgModuleDep (core.js:10581) 
    at NgModuleRef_.get (core.js:11806) 
    at new MetadataService (metadata.service.ts:23) 
    at _createClass (core.js:10622) 

App-Modul:

@NgModule({ 
    declarations: [ 
     AppComponent, 
     ... 
    ], 
    imports: [ 
     BrowserModule, 
     HttpClientModule, 
     AppRoutingModule, 
     FormsModule, 
     FlexLayoutModule, 
     I18NextModule.forRoot() 
    ], 
    providers: [ 
     { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }, 
     MetadataService, 
     { provide: APP_INITIALIZER, useFactory: MetadataProviderFactory, deps: [MetadataService], multi: true }, 
     { provide: APP_INITIALIZER, useFactory: I18NextProviderFactory, deps: [I18NEXT_SERVICE], multi: true }  
    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

Metadatendienst:

import { Injectable, Injector } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import { HttpClient } from '@angular/common/http'; 

@Injectable() 
export class MetadataService { 
    private http: HttpClient; 

    constructor(private injector: Injector) { 
     this.http = injector.get(HttpClient); // this row makes a problem 
    } 

Diese Zeile macht ein Problem.

Ich habe diese Zeile zu vermeiden zirkuläre Referenz und ich bekomme "Maximale Call-Stack-Größe überschritten". Wo liege ich falsch?

+0

Warum injizieren Sie nicht den 'HttpClient' im Konstruktor? –

+0

Weil ich bekomme 'kann zyklische Abhängigkeit nicht instanziieren!' Error. – Milos

+0

@Milos irgendwelche Updates? Ich stoße auf etwas Ähnliches, ich war in der Lage, es zu beheben, indem ich den http Anruf mit einem setTimeout verzögerte. (Ich hatte einen Anruf gemacht, sobald der Dienst erstellt wurde) –

Antwort

1

Sie können vorübergehend darüber hinwegkommen, indem Sie Ihren http-Aufruf, den Sie auf Service-Init machen, mit einem einfachen setTimeOut verzögern (keine Sekunden brauchen). Ich habe ein paar offene eckige Threads durchlaufen und das Hauptproblem hat mit HttpInterceptor und kreisförmige Dependenz mit dem HttpClient zu tun.

Verwandte Themen