Angular 获取错误“;Can';t解析ConfigService的所有参数“;
在运行Angular 2(v4)应用程序时,我似乎遇到了以下错误。我似乎无法找出是什么导致了这一点,因为我有Angular 获取错误“;Can';t解析ConfigService的所有参数“;,angular,typescript,Angular,Typescript,在运行Angular 2(v4)应用程序时,我似乎遇到了以下错误。我似乎无法找出是什么导致了这一点,因为我有@Injectable vendor.dll.js:48569 Uncaught Error: Can't resolve all parameters for ConfigService: (?). at syntaxError (http://localhost:8080/vendor.dll.js:35507:34) [<root>] at Compile
@Injectable
vendor.dll.js:48569 Uncaught Error: Can't resolve all parameters for ConfigService: (?).
at syntaxError (http://localhost:8080/vendor.dll.js:35507:34) [<root>]
at CompileMetadataResolver._getDependenciesMetadata (http://localhost:8080/vendor.dll.js:48343:35) [<root>]
at CompileMetadataResolver._getTypeMetadata (http://localhost:8080/vendor.dll.js:48211:26) [<root>]
at CompileMetadataResolver._getInjectableMetadata (http://localhost:8080/vendor.dll.js:48197:21) [<root>]
at CompileMetadataResolver.getProviderMetadata (http://localhost:8080/vendor.dll.js:48486:40) [<root>]
at http://localhost:8080/vendor.dll.js:48414:49 [<root>]
at Array.forEach (native) [<root>]
at CompileMetadataResolver._getProvidersMetadata (http://localhost:8080/vendor.dll.js:48377:19) [<root>]
at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.dll.js:48033:50) [<root>]
at CompileMetadataResolver.getNgModuleSummary (http://localhost:8080/vendor.dll.js:47887:52) [<root>]
at http://localhost:8080/vendor.dll.js:47960:72 [<root>]
at Array.forEach (native) [<root>]
at CompileMetadataResolver.getNgModuleMetadata (http://localhost:8080/vendor.dll.js:47945:49) [<root>]
at CompileMetadataResolver.getNgModuleSummary (http://localhost:8080/vendor.dll.js:47887:52) [<root>]
config.js
import { Injectable } from '@angular/core';
import { ModuleConfig } from './';
@Injectable()
export class ConfigService {
CONFIG_OPTIONS: ModuleConfig;
constructor(moduleConfig?: ModuleConfig) {
this.CONFIG_OPTIONS = new ModuleConfig();
this.setProperty('sortIcon', moduleConfig);
this.setProperty('sortAscIcon', moduleConfig);
this.setProperty('sortDescIcon', moduleConfig);
this.setProperty('sortIconSelector', moduleConfig);
this.setProperty('i18nEnabled', moduleConfig);
this.setProperty('defaultI18nLocation', moduleConfig);
this.setProperty('defaultI18nLang', moduleConfig);
this.setProperty('noi18nMessage', moduleConfig);
}
getConfig(): ModuleConfig {
return this.CONFIG_OPTIONS;
}
private setProperty(property, moduleConfig) {
this.CONFIG_OPTIONS[property] = (moduleConfig && moduleConfig[property]) ? moduleConfig[property] : this.CONFIG_OPTIONS[property];
}
}
import { Injectable } from '@angular/core';
@Injectable()
export class ModuleConfig {
sortIcon? = 'fa-sort';
sortAscIcon? = 'fa-sort-asc';
sortDescIcon? = 'fa-sort-desc';
sortIconSelector? = 'span.fa';
i18nEnabled? = false;
defaultI18nLocation? = 'global';
defaultI18nLang? = 'en';
noi18nMessage? = 'translation-not-found';
}
而@NgModule
如下所示
import {
ModuleConfig,
ConfigService
} from './';
export const MODULE_CONFIG: ModuleConfig = {
i18nEnabled: true,
defaultI18nLang: 'en'
};
@NgModule({
imports: [
],
declarations: [
],
providers: [
{
provide: ModuleConfig, useValue: MODULE_CONFIG
},
ConfigService,
Title
],
exports: [
]
})
export class SharedCommonModule {}
我假设Angulars DI不喜欢中的
?
constructor(moduleConfig?: ModuleConfig) {
我会尽量不带
constructor(moduleConfig: ModuleConfig) {
或者
constructor(@Inject(ModuleConfig) moduleConfig?: ModuleConfig) {
我认为如果目标是拥有一个可选的DI,
@optional
装饰器可能会工作。他提供了它,因此不需要@Optional()
,但我也想知道?
的目的是什么。也许要手动实例化它?如果没有提供ModuleConfig
时它应该可以工作,那么您是对的,那么需要@Optional()
。谢谢您的建议。我来看看@Optional@nixgadgets因此,这意味着您的模块图
未定义,可能与错误路径或循环依赖关系有关。呃。它无法解析ModuleConfig路径,即使所有内容都已正确编译。编译器中是否有检测此问题的开关?