2015-11-09 2 views
0

FYI: с помощью angular2 (2.0.0-alpha.45) & машинописи (1.6.2)Внедрить услугу в компонент

Попытки создать простой сервис, чтобы ввести в компонент.

Ошибка я получаю: (?)

не удается разрешить все параметры {ComponentName}. Убедитесь, что все они имеют допустимый тип или аннотации.

Бутстрапирование:

bootstrap(App, [ROUTER_PROVIDERS, HTTP_PROVIDERS]); 

Service (мой-service.ts):

import {Injectable} from 'angular2/angular2'; 
@Injectable() 
export class MyService { 
    public doSomething() {} 
} 

Потребляя Компонент:

import {Component} from 'angular2/angular2'; 
import {MyService} from './my-service'; 
export class ListManager{ 
    constructor(private myService: MyService){ 
    console.log('myService', myService); 
    } 
} 

Вещи я пытался

  • В службе:
    • маркировка/деинсталлировать маркировка службы с @Injectable
  • В самозагрузкой:
    • Добавление/удаление MyService в список самонастройки поставщиков
  • В компоненте
    • с указанием услуги в качестве поставщика @Component({providers: [MyService]})
    • указав службу в качестве связующего @Component({bindings: [MyService]})
+0

Является ли 'ComponentName' вашим сервисом? Что вы передаете его конструктору? Почему вы импортируете «MyService», а затем вызываете «ListService»? Что это за строка 'import {Component} из 'angular2/angular2', 'angular2/router';'? –

+0

'ComponentName' - это имя компонента, который я пытаюсь внедрить в службу ...«ListService» - это опечатка, когда возникает вопрос о том, что имена здесь были более универсальными (исправлены) (маршрутизатор был удержанием при копировании/вставке здесь ... удалено как не относящееся к делу) – Brocco

+0

Я также использую webpack, и я склоняюсь к тому, что это преступник (а не сам webpack, но мое использование) – Brocco

ответ

2

Я думаю, что вы могли бы сделать:

constructor(private myService: MyService){ 
    console.log('myService', myService); 
} 

Вы также необходимо указать службу в качестве поставщика в определении @Component

@Component({ 
    ... 
    providers: [MyService]}) 
+0

Спасибо, это то, что я уже пробовал, я обновлю свой вопрос, чтобы сделать его немного яснее. – Brocco

+0

Вот как я решил решить проблему, но у меня были большие проблемы в отношении процесса сборки веб-пакета. Благодаря! – Brocco

0

Попробуйте сделать это в компоненте:

import {Component} from 'angular2/angular2'; 
import {Inject} from 'angular2/core'; 
import {MyService} from './my-service'; 

export class ListManager{ 
    private listService: ListService; 

    constructor(@Inject(ListService) listService: ListService){ 
     console.log('listService', listService); 
    } 
} 

(Обратите внимание на новый импорт и @Inject внутри конструктора)

Позвольте мне знать, если он работает для вас. Плункер также поможет изолировать проблему.

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