2016-05-23 2 views
0

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

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) 

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

ответ

1

Вы должны предоставить AlertModel где

bootstrap(AppComponent, [AlertModel]) 

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

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

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

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

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

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

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

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

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

    public alert(){ 
    this.alertModel.message = 'success'; 
    //... 
    } 
} 
Смежные вопросы