Angular2 - 错误:无法解析IconService的所有参数

时间:2017-02-23 20:03:57

标签: angular typescript

我一直试图将我的应用程序切换到AoT编译,并且在应用程序加载时在生产环境中收到此错误(它在本地工作正常)。

constructor(private http:Http, private iconConfiguror:IconConfiguror) {

似乎错误来自提供IconService的模块。图标服务构造函数看起来像

HttpModule

所以我的问题是这个错误是什么意思,为什么它只会在prod环境中发生(我已尝试在本地启用prod模式)?

似乎这意味着未提供http和图标配置参数,但图标配置在应用模块级别提供,IconModule导入IconService其中提供@NgModule({ imports: [ CommonModule, HttpModule, ], declarations: [ IconComponent, ], exports: [ IconComponent, ], providers: [ IconService, __platform_browser_private__.BROWSER_SANITIZATION_PROVIDERS, ], })

export * from "./components/icon/icon.configuror";

export * from "./components/icon/icon.service.provider";

export * from "./components/icon/icon.service";

export * from "./components/icon/icon.component";

export * from "./components/icon/icon.module";

我们的图标组件的桶。

function myFunction() {
    var x = document.getElementById("mySelect").value;
    document.getElementById("demo").innerHTML = "You selected: " + x;
    console.log("x:",x);
}

6 个答案:

答案 0 :(得分:6)

通过以不同的方式提供IconService来解决此问题。

    {
        provide: IconService,
        useFactory: iconServiceFactory,
        deps: [Http, IconConfiguror],
    },

和工厂本身

export function iconServiceFactory(http: Http, iconConfiguror: IconConfiguror) {
    return new IconService(http, iconConfiguror);
}

我想由于某种原因没有提供Http(即使导入了HttpModule),所以我不得不将它声明为依赖。

答案 1 :(得分:5)

此错误的一个可能原因是,如果您没有使用IconService装饰@Injectable()课程。如果这是原因,在类声明之上添加该装饰将修复错误。

答案 2 :(得分:2)

我遇到过类似的问题。我通过更改桶中的出口订单来解决它。

基本服务文件:

// dependency.service.ts
@Injectable()
export class DependencyService { }

// dependant.service.ts
import { DependencyService } from '.';

@Injectable()
export class DependantService {
    constructor(private dependency: DependencyService) { }
}

以下每桶导致错误:

// index.ts
export * from './dependant.service';
export * from './dependency.service';

关注其中一部分:

// index.ts
export * from './dependency.service';
export * from './dependant.service';

答案 3 :(得分:1)

有时是修复它的单一方法 - 手动描述参数。

static get parameters() { return [Http, IconConfiguror] }

constructor(private http:Http, private iconConfiguror:IconConfiguror) {

答案 4 :(得分:0)

当我在app.module.ts

中导入服务时使用了以下内容时,为我工作
mainWindow = [NSApplication sharedApplication].windows[0];
secondaryWindow = [[NSWindow alloc]init];
[secondaryWindow setFrame:mainWindow.frame display:false];

// the below is what I'm not sure of - how to reference nib instead of storyboard?

NSStoryboard *mainStoryboard = [NSStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
NSViewController *vc = [mainStoryboard instantiateControllerWithIdentifier:@"BackViewController"];
[secondaryWindow setContentViewController:vc];

答案 5 :(得分:0)

我的问题是我是从一个基类继承的,我用@Injectable装饰了这个基类。继承类是应该具有@Injectable属性的类,而不是基类。似乎当编译器看到@Injectable attibute时,它会检查以确保可以注入构造函数中的所有属性。如果没有,那就是错误。我通过从该类中删除@Injectable attibute来解决它。