简体   繁体   English

使用进样器时出现角度“超出最大调用堆栈大小”

[英]Angular “Maximum call stack size exceeded” when use injector

I created Angular 5 project and create one factory which should provide metadata from service before application start. 我创建了Angular 5项目并创建了一个工厂,该工厂应在应用程序启动之前提供服务中的元数据。 The problem is that I get error: 问题是我得到了错误:

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 module: 应用模块:

@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 { }

Metadata service: 元数据服务:

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
    }

This row makes a problem. 这行造成了问题。

 this.http = injector.get(HttpClient);

I put this line avoid circular reference and I get "Maximum call stack size exceeded". 我把这一行避免循环引用,并得到“超出最大调用堆栈大小”。 Where I am wrong ? 我哪里错了?

You can temporarily get over this by delaying your http call that you make on service init, with a simple setTimeOut (don't need any seconds). 您可以通过简单的setTimeOut (不需要任何时间)来延迟服务初始化中的http调用,从而暂时解决此问题。 I've gone through a few open Angular threads and the main issue has to do with HttpInterceptor and circular depedenecy with the HttpClient. 我经历了一些开放的Angular线程,主要问题与HttpInterceptor和HttpClient的循环depedenecy有关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM