我知道我不是唯一一个对此术语有疑问的人。但有角度的家伙在这个词上有大约23个问题。我尝试了很多不同的东西。一个很重要:我尝试它的方式与@angular/http
(导出裸工厂函数)的方式相同。
事实是:它有效 - 代码不正确。但是当我尝试导入模块时,我收到了这个错误:
ERROR in Error encountered resolving symbol values statically. Calling function
'TranslatorConfig', function calls are not supported. Consider replacing the
function or lambda with a reference to an exported function, resolving symbol
TranslatorModule.forRoot
当我运行服务并在此错误后触摸该文件时,它会重新编译而不会出现错误。但是我尝试构建(ng build -e prod --aot false
)我得到此错误并且构建停止。我在tsconfig.json中设置"strictMetadataEmit": true
时也遇到此错误。我有一个TranslatorModule.metadata.json
- 这不会是错误。
为什么它不起作用?这个错误消息的含义是什么?什么是符号值以及为什么它必须是静态的?如何让它工作?
测试时,您只需安装angular2-translator@2.0.0-alpha3即可。您可以在github上找到代码:https://github.com/tflori/angular2-translator/tree/2.0
我刚试过这些导出的函数和不同的提供程序,如下所示。
export function createTranslatorConfig(config: any = {}) {
return new TranslatorConfig(config);
}
export function createTranslator(translatorContainer: TranslatorContainer, module: string) {
return translatorContainer.getTranslator(module);
}
// ...
export class TranslatorModule {
public static forRoot(config: any = {}, module: string = "default"): ModuleWithProviders {
return {
ngModule: TranslatorModule,
providers: [
{ provide: "TranslatorConfigOptions", useValue: config },
{ provide: TranslatorConfig, useFactory: createTranslatorConfig, deps: [ "TranslatorConfigOptions" ] },
{ provide: "TranslatorModuleName", useValue: module },
{
provide: Translator,
useFactory: createTranslator,
deps: [ TranslatorContainer, "TranslatorModuleName" ],
},
],
};
}
}
结果只是另一条错误消息(现在'符号NgModule的'emakeDecorator'有问题:ERROR in Error encountered resolving symbol values statically. Calling function 'ɵmakeDecorator', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol NgModule
答案 0 :(得分:0)
我只回答最后一个问题。我仍然不知道他们对“符号价值”的含义是什么,而且这个消息仍然让我感到困惑。
最后,useValue只能是一个值 - 你不能在这里或之前调用函数并给出结果。需要信息的工厂需要来自其他提供商的工厂。
巴巴尔的链接帮助我得出了这样的结论:
<DIV>
我在问题中发布的内容也有效。由于将模块链接到测试项目的node_modules,我收到此错误。
我仍然在寻找问题的答案:他们对我有什么要求?为什么?