Angular2:使用模型服务 - "没有模型提供者"

时间:2016-05-23 08:31:22

标签: javascript angularjs angular

我要做的是创建一个使用模型来显示警报的服务。警报模型应该是其他任何地方都必须的,但在那项服务中,但我无法做到这一点。我的服务:

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)

我是棱角分明的新人,我不明白这一点。我错过了什么?提前谢谢!

2 个答案:

答案 0 :(得分:1)

您需要在某个地方提供AlertModel

bootstrap(AppComponent, [AlertModel])

或在根组件中(首选):

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

确保AlertModel具有@Injectable()装饰器,并且还提供了所有构造函数参数(如果有的话)

如果构造函数参数的类型已经是@Inject(AlertModel),则

AlertModel是多余的。只有在类型不同或@Inject()没有AlertModel装饰器的情况下才需要@Injectable()

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

答案 1 :(得分:0)

您有此错误,因为AlertModel组中没有UserComponent类的提供程序(调用该服务)。您可以在引导应用程序时在组件的providers属性中定义此类。

查看问题以了解更多关于分层注入器如何工作以及如何将内容注入服务的信息:

由于AlertModel类似乎是一个模型类,我认为你不需要注入它。您只需导入类并实例化它:

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

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