2016-03-29 4 views
0

Я определил 3 компонента в своем приложении. AppComponent, MainComponent и TextComponent.Angular2 - Поставщик услуг не найден

AppComponent содержит MainComponent следующим образом. Обратите внимание, что у меня есть две службы, я включил в атрибуте поставщиков, 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. Основной компонент определяется следующим образом:

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

Обратите внимание, что я включил TextComponent в атрибут директивы выше. 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 [email protected]:13] 

Но я зарегистрировал службу CommonProductEventsService в AppComponent. Так почему я получаю эту ошибку?

ответ

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

+0

Есть ли ограничение на количество услуг могут быть объявлены в провайдеров: [] массив? У меня есть 20 сервисов, объявленных там и в дочерних компонентах, это ошибка. –

+0

Я не думаю, что есть предел, по крайней мере, не такой маленький. –

+0

И действительно ли порядок, в котором определены услуги, имеет значение? Если у них есть зависимости друг от друга? –

Смежные вопросы