#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
аннотации. Это хорошо документировано уже миллионы раз, см.: