7

我编写了一个带有一些服务的角度库,以便在不同的角度应用程序中使用它。在没有 --prod 的情况下一切正常,因此在 Angular 应用程序中没有 AOT 编译。

使用 ng-packagr 以及 cli 以及一些不同的 yeoman 生成器生成库每次都会产生相同的错误。此外,我尝试了不同的 ng 版本(5.xx、6.xx 和 7.xx)。但是在所有情况下,当我在应用程序的 app.module 中调用 LoggerModule.forRoot() 时,每次(使用 AOT)都会出现相同的错误:

ERROR in Error during template compile of 'AppModule' 
Function calls are not supported in decorators but 'LoggerModule' was called.

我阅读了很多关于这个主题的文章,在 tsconfig 中尝试了不同的 angularCompilerOptions。还有其他想法吗?该模块在没有 AOT 的情况下工作正常(但这不是我们的选择)......

库的 NgModule:

@NgModule({
  declarations: [],
  imports: [],
  providers: []
})
export class LoggerModule {

  static forRoot(): ModuleWithProviders {
    return {
        ngModule: LoggerModule,
        providers: [LoggerService]
    }
  }
}

应用程序的 NgModule:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    LoggerModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent],
  entryComponents: [AppComponent]
})
export class AppModule {
}
4

2 回答 2

1

在模块定义之外声明你的 forRoot :

import { ModuleWithProviders } from ‘@angular/core’;
export const forRoot: ModuleWithProviders = LoggerModule.forRoot();

@NgModule({
   declarations: [
      AppComponent
   ],
   imports: [
        BrowserModule,
       AppRoutingModule,
       forRoot
   ],
   providers: [],
   bootstrap: [AppComponent],
   entryComponents: [AppComponent]
})
export class AppModule {
}
于 2018-10-21T23:27:41.527 回答
0

“angularCompilerOptions”:{“fullTemplateTypeCheck”:真,“strictInjectionParameters”:真}

进入你的 tsconfig.json

于 2021-03-25T22:42:56.953 回答