Подтвердить что ты не робот

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

Кто-нибудь знает, что вызывает эту ошибку?

4b9b3361

Ответ 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();
  }
}

Это потому, что инжекторы полагаются на компоненты. Если вы хотите получить более подробную информацию о том, как вводить услугу в службу, вы можете посмотреть на этот вопрос: