编程语言
首页 > 编程语言> > javascript-装饰器不支持Angular 6 Prod Function调用,但已调用“ ..Module”

javascript-装饰器不支持Angular 6 Prod Function调用,但已调用“ ..Module”

作者:互联网

尝试使用angular2-json-schema-form&时出现此错误内置产品

ERROR in Error during template compile of ‘DemoModule’
Function calls are not supported in decorators but ‘JsonSchemaFormModule’ was called.
I found out that the the error comes from:

@NgModule({
  declarations: [ AceEditorDirective, DemoComponent, DemoRootComponent ],
  imports: [
    BrowserModule, BrowserAnimationsModule, FlexLayoutModule, FormsModule,
    HttpClientModule, MatButtonModule, MatCardModule, MatCheckboxModule,
    MatIconModule, MatMenuModule, MatSelectModule, MatToolbarModule,
    RouterModule.forRoot(routes),

    NoFrameworkModule, MaterialDesignFrameworkModule,
    Bootstrap3FrameworkModule, Bootstrap4FrameworkModule,

    JsonSchemaFormModule.forRoot(   // the source of the Error
      NoFrameworkModule,
      MaterialDesignFrameworkModule,
      Bootstrap3FrameworkModule,
      Bootstrap4FrameworkModule
    )
  ],
  bootstrap: [ DemoRootComponent ]
}) 

在库的源代码中,他们使用如下代码:

export class JsonSchemaFormModule {
  static forRoot(...frameworks): ModuleWithProviders {
    const loadFrameworks = frameworks.length ?
      frameworks.map(framework => framework.forRoot().providers[0]) :
      [{ provide: Framework, useClass: NoFramework, multi: true }];
    return {
      ngModule: JsonSchemaFormModule,
      providers: [
        JsonSchemaFormService, FrameworkLibraryService, WidgetLibraryService,
        ...loadFrameworks
      ]
    };
  }
}

当我删除变量loadFramworks时,我没有出现错误,但是似乎无法在providers属性中注入框架

解决方法:

另一个答案说这是AOT的问题.在@NgModule之类的装饰器中调用的函数必须适合于编译器的静态分析.确切的要求是棘手的,因为它们取决于使用的库和工具的多种因素和版本.

在您拥有的库中有违规功能时,就有行动的余地.例如,以我为例,我决定从函数中删除所有局部变量,将其简化为一个复杂表达式的单个return语句,除了可以正常工作的RouterModule.forRoot之外,没有其他函数调用.例如,参见Angular Flex Layout项目中的the commit “make withConfig AOT compatible”.有人评论了Angular GitHub问题上的tsconfig.lib.json中的angular编译器选项.

但是,就您而言,您似乎无法控制有问题的模块和功能.您绝对应该将其报告给模块的开发人员.

标签:angular,typescript,angular2-aot,javascript,angular6
来源: https://codeday.me/bug/20191108/2009792.html