Angular2组件无法在构造函数中接收服务
我有一个服务定义如下Angular2组件无法在构造函数中接收服务,angular,typescript,Angular,Typescript,我有一个服务定义如下 import { Injectable } from "@angular/core"; import { Http } from "@angular/http"; @Injectable() export class SirService { constructor(private http: Http) { console.log("The http is: " + http); } stuff() { return ["uno", "duo",
import { Injectable } from "@angular/core";
import { Http } from "@angular/http";
@Injectable()
export class SirService {
constructor(private http: Http) {
console.log("The http is: " + http);
}
stuff() { return ["uno", "duo", "tress"]; }
}
然后,我将组件的提供者设置为这样的服务
import { Component } from "@angular/core";
import { SirService } from "../app.service";
@Component({
selector: "demo",
providers: [SirService],
template: require("./demo.html"),
styles: [require("./common.scss")]
})
export class Demo {
// constructor() {
constructor(private service: SirService) {
console.log("Service: " + service);
}
}
不过,我不确定如何访问服务中的stuff()
调用。上面产生的错误告诉我Angular找不到任何有意义的东西来推送到我的构造函数中。当我使用无参数构造函数时,我没有对服务的引用。有点卡在那里,似乎很少有例子显示如何为组件而不是模块执行此操作。。。(我可能在用谷歌搜索……)
错误消息非常大,但这是最相关的部分(据我所知)
未处理的承诺拒绝:没有Http的提供程序;区域:角度;任务:承诺;价值:
错误是
No provider for Http
这意味着问题不在于你的服务。问题是您的服务需要使用Http服务,而该服务不存在
您需要导入提供此服务的HttpModule:
@NgModule({
// ...
imports: [BrowserModule, ..., HttpModule]
})
export class AppModule {}
更多解释请参见当您询问错误时,请张贴错误。完整而准确的错误。@JBNizet我并没有询问错误本身,因为与参考资料相比,语法应该是正确的,但我同意它可能有用。请在5分钟后查看编辑。谢谢你的指点。@JBNizet发布。它的全部内容太大,无法显示,但编辑显示了有趣的部分。啊哈!因此,无法将服务类和组件划分为唯一知道
HttpModule
?我必须把它放在我模块的decorator的imports部分吗?我的意思是,毕竟,我把它导入了服务导入(第2行)。是的。您的服务,因为它是完全无状态的,也可以由根模块提供:为组件的每个实例创建新实例没有实际意义。您可以为这个组件和这个服务创建一个子模块,但我不太明白这一点。不管怎样,你将在任何地方使用Http。有趣的一点。我明白了。我试着用不同的方法来研究什么有效,什么无效,最重要的是,为什么有效或无效。