То, что я пытаюсь сделать, это создать службу, которая использует модель для отображения предупреждения. Модель оповещения должна быть необходима нигде, кроме этой службы, но я не могу выполнить эту работу. Мой сервис:
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)
Я новичок в угловой, и я не понимаю этого. Что мне не хватает? Заранее спасибо!
Вам нужно предоставить AlertModel
где-нибудь
bootstrap(AppComponent, [AlertModel])
или в корневом компоненте (предпочтительно):
@Component({
selector: 'my-app',
providers: [AlertModel],
...
})
Убедитесь, что AlertModel
имеет декоратор @Injectable()
и все его параметры конструктора также предоставляются (если есть)
@Inject(AlertModel)
избыточен, если тип параметра конструктора уже является AlertModel
. @Inject()
требуется только в том случае, если тип отличается или если AlertModel
не имеет декоратора @Injectable()
.
constructor(@Inject(AlertModel) alertModel: AlertModel) {
У вас есть эта ошибка, так как нет провайдера класса AlertModel
видимого из компонента UserComponent
(который вызывает службу). Вы можете определить либо этот класс в атрибуте providers
компонента, либо при загрузке приложения.
См. Вопрос, чтобы узнать больше о том, как работают иерархические инжекторы и как вводить вещи в службы:
Поскольку класс AlertModel
кажется модельным классом, я не думаю, что вам нужно его вводить. Вы можете просто импортировать класс и создать его экземпляр:
@Injectable()
export class AlertService {
alertModel: AlertModel = new AlertModel();
public alert(){
this.alertModel.message = 'success';
//...
}
}