我有一个遗留代码,到目前为止我还不完全了解,但是必须维护,大声笑))
该代码是按我下面所述编写的组件,它可以与ng serve
一起使用,但是可以与ng build --prod
一起崩溃。
providers
字段的问题:
@Component({
selector: "legacy-component",
templateUrl: './legacy-component.component.html',
styleUrls: ['./legacy-component.scss'],
//Take a look at "providers", the problem is there
providers: [provideWidget(LegacyComponent, {
id: "legacy",
options: {},
layout: { minCols: 2, cols: 4, rows: 2 },
info: {
name: "Legacy Compoent",
image: "assets/img/legacy/legacy.png",
description: ""
}
})]
})
export class LegacyComponent {...}
我不太了解提供商在这里发生了什么,但是当我尝试构建项目时,我有:
Error during template compile of 'LegacyComponent'
Function expressions are not supported in decorators in 'provideWidget'
'provideWidget' contains the error at some/path/other-class.ts
Consider changing the function expression into an exported function.
但是,如果我将provideWidget
重写为一个函数,则会出现不同的错误:
Error during template compile of 'LegacyComponent'
Function calls are not supported in decorators but 'provideWidget' was called.
我假设在提供程序中进行函数调用可能不是一个好主意,但我应该启动代码,并且我无法替换由于该函数的逻辑复杂,provideWidget
使用了一些静态数据进行调用。
在这种情况下,有人对如何构建生产版本吗?
答案 0 :(得分:0)
在这里您可以看到提供者可以是TypeProvider | ValueProvider | ClassProvider | ConstructorProvider | ExistingProvider | FactoryProvider
。
因此,如果您需要动态提供程序,则需要使用FactoryProvider
:
{ provide: 'SomeToken', useFactory: factoryFunction }
另一种方式是,如果ProvideWidget是无状态函数,则可以在类定义之前创建一个常量,并将其分配给const值并用作ValueProvider
。