Angular2 - 找不到服务提供商

时间:2016-03-29 15:34:19

标签: exception dependency-injection angular

我在我的应用程序中定义了3个组件。 AppComponent,MainComponent和TextComponent。

AppComponent包含MainComponent,如下所示。请注意,我在providers属性中包含了两个服务,CommonEventsService,CommonProductEventsService

@Component({
  selector: 'my-app',
  template: `
    <my-main></my-main>
  `,
  providers: [CommonEventsService, CommonProductEventsService],
  directives: [ROUTER_DIRECTIVES, MainComponent]
})
export class AppComponent implements OnInit, OnDestroy  {...}

主要组件包含在AppComponent的directives属性中。主要组成部分定义如下:

@Component({
  template: "<my-add-text></my-add-text>",
  selector: "my-main",
  directives: [TextComponent]
})
export class MainComponent implements OnInit, OnDestroy {...}

请注意,我已将TextComponent包含在上面的directives属性中。 TextComponent定义如下:

@Component({
  selector: "my-add-text",
  templateUrl: "/app/scripts/components/add/text.component.html",
})
export class TextComponent {
 constructor(private commonProductEvents: CommonProductEventsService){}
}

问题是当加载应用程序时,我收到以下错误。

EXCEPTION: No provider for CommonProductEventsService! (TextComponent ->   CommonProductEventsService) in [addText in MainComponent@41:13]

但是我在AppComponent中注册了CommonProductEventsService。那我为什么会收到这个错误?

1 个答案:

答案 0 :(得分:0)

无法复制。请参阅Working Plunker

你有吗

CommonEventsService
CommonProductEventsService 

在与组件相同的文件中,但在文件的下方?

然后您需要向上移动它们,使用forwardRef或将它们作为单独的文件移动并导入它们。

另见
- https://angular.io/docs/ts/latest/api/core/forwardRef-function.html - http://blog.thoughtram.io/angular/2015/09/03/forward-references-in-angular-2.html