2016-12-30 138 views
1

你好,我一直在试图找出大约2天,现在我看不出哪里会出错。我遇到了一些我不确定如何调试的错误。Angular 2依赖注入不起作用

无提供AppService服务

我已经在plunker

重建这个我觉得现在的问题是,我不注册AppService服务anyware。

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 

Click Here For plunker

+0

另请参阅我的回答下面的评论,揭示了你的Plunker中的另一个问题。 –

+0

谢谢,这是问题的一部分。我仍然收到一个错误,但是不一样。我也会研究它。 – JamTay317

回答

3
Injectable() 
export class AppService{ 

应该

@Injectable() 
export class AppService{ 
provoder:[AppService] 

应该

providers:[AppService] 

Plunker example

如果你想有一个单一的instan您的整个应用程序的服务将其添加到AppModule的提供商,如其他答案所示。如果你想要一个实例,每AppComponent(它通常也是你的整个应用程序的一个实例),然后保持它在哪里。但是,在模块级别提供的其他服务将无法以这种方式注入AppService

+0

即使没有'@',Injectable()装饰器也能工作,请问这是怎么回事? –

+1

实际上,它并没有检查Plunker,而是在代码中发现了另一个错误。构造函数缺少一个主体'{}',因此被忽略。如果类的构造函数具有参数,则只需要'@Injectable()'。在这种情况下,因为构造函数被忽略,所以该类被视为没有构造函数(或者只有一个默认构造函数),而不需要装饰器。 –

+0

谢谢你,PS:我不是问题的拥有者,但我问过你,因为你是一个有角度的金牌。谢谢;) –

1

你必须AppService服务添加到providers阵列:

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    bootstrap: [ App ], 
    providers: [AppService] 
}) 
export class AppModule {} 

你可以阅读更多关于Angular2依赖注入这里:https://angular.io/docs/ts/latest/guide/dependency-injection.html

+0

这解决了重拳但不是我遇到的问题,我在我的机器上有一个问题。我会读更多关于它。 – JamTay317

0

添加

providers: [AppService],

@NgModule如下:

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    providers: [ AppService ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 

你是对的,你需要声明你的服务你的模块可以使用它作为一个DI。