首页 文章

Angular不能在外部库中使用HttpClient

提问于
浏览
12

当我尝试在外部库中实例化 HttpClient 服务,然后在Angular应用程序中使用该库时,我得到 StaticInjectorError 错误:

使用 Angular 5.0.0

AppComponent_Host.ngfactory.js? [sm]:1 ERROR Error:
  StaticInjectorError[InjectionToken DocumentToken]:   
  StaticInjectorError[InjectionToken DocumentToken]: 
     NullInjectorError: No provider for InjectionToken DocumentToken!
     at _NullInjector.get (core.js:993)
     at resolveToken (core.js:1281)
     at tryResolveToken (core.js:1223)
     at StaticInjector.get (core.js:1094)
     at resolveToken (core.js:1281)
     at tryResolveToken (core.js:1223)
     at StaticInjector.get (core.js:1094)
     at resolveNgModuleDep (core.js:10878)
     at _createClass (core.js:10919)
     at _createProviderInstance$1 (core.js:10889)

使用 Angular 5.2.0-rc.0

ERROR Error: StaticInjectorError(AppModule)[HttpXsrfTokenExtractor ->
InjectionToken DocumentToken]:    StaticInjectorError(Platform:
core)[HttpXsrfTokenExtractor -> InjectionToken DocumentToken]: 
    NullInjectorError: No provider for InjectionToken DocumentToken!
    at _NullInjector.get (core.js:994)
    at resolveToken (core.js:1292)
    at tryResolveToken (core.js:1234)
    at StaticInjector.get (core.js:1102)
    at resolveToken (core.js:1292)
    at tryResolveToken (core.js:1234)
    at StaticInjector.get (core.js:1102)
    at resolveNgModuleDep (core.js:10836)
    at _createClass (core.js:10877)
    at _createProviderInstance$1 (core.js:10847)

我用一个空白的 @angular/cli 应用程序从angular-library-starter导入一个空白的库种子,只是导入并尝试使用HttpClient:

(为简洁而截断的导入行)

申请: app.module.ts

@NgModule({
  declarations: [ AppComponent ],
  imports: [ ..., ArithmeticModule.forRoot() ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

申请: app.component.ts

@Component({
  ...
})
export class AppComponent {
  constructor(private sum: SumService) {}
}

对于库,我所做的只是在库模块中导入 HttpClientModule ,然后尝试将其注入 SumService

图书馆: arithmetic.module.ts

@NgModule({
    imports: [ HttpClientModule ]
})
export class ArithmeticModule {
    public static forRoot(): ModuleWithProviders {
        return {
            ngModule: ArithmeticModule,
            providers: [ SumService ]
        };
    }
}

图书馆: sum.service.ts

@Injectable()
export class SumService {
  constructor(private http: HttpClient) {}
  ....
}

此设置会导致帖子顶部提到的 StaticInjectorError 错误 .

  • 在汇总配置中,我添加了 @angular/common/http / ng.common.http 作为外部/全局 .

  • 我尝试了很多不同的设置,库种子,汇总和webpack . 这一切都导致了同样的问题 .

有任何想法吗?

4 回答

  • 0

    我遇到了类似的问题并修复了NgxMaskModule(2.2.2)的升级并在模块导入中添加了NgxMaskModule.forRoot() .

  • 0

    我们正在使用HttpClient进行翻译模块 . 我正在使用下面的导入方式;

    // translate
    HttpClientModule,
    TranslateModule.forRoot({
           loader: {
                provide: TranslateLoader,
                useFactory: HttpLoaderFactory,
                deps: [HttpClient]
            }
        }),
    
  • 0

    尝试在 app.module.ts. 中导入 HttpClient 模块

    在这种情况下, HttpClientModule 将是您的同伴依赖,

    所以你必须在主应用程序中导入HttpClientModule .

  • 0

    StaticInjectorError

    尝试在module.ts中导入HttpClient模块并将服务添加到提供程序可能会起作用 .

相关问题