Angular2: сервис с моделью - «нет поставщика для модели»

0

То, что я пытаюсь сделать, это создать службу, которая использует модель для отображения предупреждения. Модель оповещения должна быть необходима нигде, кроме этой службы, но я не могу выполнить эту работу. Мой сервис:

import {Injectable, Inject} from "angular2/core";
import {AlertModel} from "../models/alert.model";

@Injectable()
export class AlertService {
    constructor(@Inject(AlertModel) alertModel: AlertModel) {
    }

    public alert(){
        this.alertModel.message = 'success';
        //...
    }
}

Но я продолжаю получать эту ошибку:

Uncaught (in promise): No provider for AlertModel! (UserComponent -> AlertService -> AlertModel)

Я новичок в угловой, и я не понимаю этого. Что мне не хватает? Заранее спасибо!

Теги:
angular

2 ответа

1

Вам нужно предоставить AlertModel где-нибудь

bootstrap(AppComponent, [AlertModel])

или в корневом компоненте (предпочтительно):

@Component({
  selector: 'my-app',
  providers: [AlertModel],
  ...
})

Убедитесь, что AlertModel имеет декоратор @Injectable() и все его параметры конструктора также предоставляются (если есть)

@Inject(AlertModel) избыточен, если тип параметра конструктора уже является AlertModel. @Inject() требуется только в том случае, если тип отличается или если AlertModel не имеет декоратора @Injectable().

constructor(@Inject(AlertModel) alertModel: AlertModel) {
0

У вас есть эта ошибка, так как нет провайдера класса AlertModel видимого из компонента UserComponent (который вызывает службу). Вы можете определить либо этот класс в атрибуте providers компонента, либо при загрузке приложения.

См. Вопрос, чтобы узнать больше о том, как работают иерархические инжекторы и как вводить вещи в службы:

Поскольку класс AlertModel кажется модельным классом, я не думаю, что вам нужно его вводить. Вы можете просто импортировать класс и создать его экземпляр:

@Injectable()
export class AlertService {
  alertModel: AlertModel = new AlertModel();

  public alert(){
    this.alertModel.message = 'success';
    //...
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню