Общий сервис в Angular2

#angular #typescript #angular2-routing #angular2-services

#angular #typescript #angular2-маршрутизация #angular2-сервисы

Вопрос:

Я пытаюсь создать общий сервис для своего приложения.

 import { Injectable } from '@angular/core';

@Injectable()
export class SharedService {
  testService() {
    console.log('share!');
  }
}
  

Затем я ввожу его в провайдеры моего app.component, но когда я попытался вызвать его в конструкторе дочернего компонента, подобного этому: constructor(public sharedService: SharedService) {} У меня ошибка:
Can't resolve all parameters for MyComponent . Я также попытался внедрить его в своих провайдерах app.module и также получил эту ошибку. Что мне делать? Как правильно его внедрить? Может ли кто-нибудь привести пример правильного общего сервиса для приложения antire (в нем есть несколько модулей)?

У меня есть система маршрутизации, и я хочу иметь общий сервис и изменять его данные из компонента, модуль которого представлен в данный момент.

Комментарии:

1. Вы импортировали SharedService дочерний компонент?

2. Нет, но разве это не просто создало бы новый экземпляр в service, который не является целью общего сервиса?

3. какую версию вы используете?

4. 2.0.1 как @angular

Ответ №1:

Я полагаю, что вы используете последнюю версию и хотите использовать одноэлементный сервис. Для этого вам необходимо зарегистрировать свой сервис, @NgModule({}) как показано здесь,

 import {Sharedservice} from 'valid path';

@NgModule({
   imports:[BroswerModule],
   ...
   providers:[SharedService]
})
  

Теперь в дочернем и родительском компонентах просто импортируйте Sharedservice в начало файла.

ПРИМЕЧАНИЕ: удалить providers:[SharedService] из каждого компонента.

Комментарии:

1. при условии правильного ответа он должен быть «помечен как ответ»

Ответ №2:

Вам нужно указать, кто является поставщиком для этой службы, с providers помощью ключевого слова @Component или @NgModule аннотации. Это хорошо документировано уже миллионы раз, см.: