Angular2 нет провайдера для служебной ошибки
От Angular2 доступ к глобальной службе без включения ее в каждый конструктор Я схватил код и немного изменил его на:
@Injectable()
export class ApiService {
constructor(public http: Http) {}
get(url: string) {
return http.get(url);
}
}
@Injectable()
export abstract class BaseService {
constructor(protected serv: ApiService) {}
}
@Injectable()
export class MediaService extends BaseService {
// Why do we need this?
constructor(s: ApiService) {
super(s)
}
makeCall() {
this.serv.get("http://www.example.com/get_data")
}
}
Однако, когда я пытаюсь запустить этот код, я получаю сообщение об ошибке в консоли:
NoProviderError {message: "Нет провайдера ApiService! (приложение → MediaService → ApiService)", стек: "Ошибка: исключение DI"
Я создал Plunkr с кодом в https://plnkr.co/edit/We2k9PDsYMVQWguMhhGl
Кто-нибудь знает, что вызывает эту ошибку?
Ответы
Ответ 1
Вам нужно также определить ApiService
в атрибуте providers
.
@Component({
selector: 'my-app',
providers: [MediaService, ApiService], // <-----
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
directives: []
})
export class App {
constructor(mediaService: MediaService) {
this.name = 'Angular2'
console.log('start');
mediaService.makeCall();
}
}
Это потому, что инжекторы полагаются на компоненты. Если вы хотите получить более подробную информацию о том, как вводить услугу в службу, вы можете посмотреть на этот вопрос: