角版本:2.0.0-beta.13在服务中注入http会导致“没有提供程序给Http!”错误
我试图注入http
到服务:
@Injectable()
export class GithubService {
...
constructor(private http: Http) {
}
}
我列出HTTP_PROVIDERS
在我的应用程序的根组件供应商,所以这个提供者应该在我的应用程序可用于任何组件:
@Component({
providers: [HTTP_PROVIDERS],
})
export class AppComponent {}
然而,当我运行该应用程序,我得到以下错误:
EXCEPTION: Error: Uncaught (in promise): No provider for Http! (HttpReqComponent -> GithubService -> Http)
我在做什么错?
编辑
我改变providers
到viewProviders
和错误已经不复存在了!
@Component({
viewProviders: [HTTP_PROVIDERS],
})
export class AppComponent {}
但是,我无法解释为什么这是工作。 http
不被任何视图直接访问。它只能在GithubService
内访问。那么为什么我必须声明HTTP_PROVIDERS
为viewProvider
?
编辑2
嗯,我搬离AppComponent的providers
申报下来的地方,我需要它的成分和现在的作品!所以在根层面宣布它一定会有一些怪癖。
@Component({
providers: [HTTP_PROVIDERS, GithubService],
})
export class HttpReqComponent { }
事实上,无论是providers
和viewProviders
作品。结果发现viewProviders
实际上更具限制性,并提供了更好的组件封装。详情请参阅this article。
你不需要viewProvider,实际上我搜索它并没有找到任何引用,但我测试过它可以和**提供程序**以及** viewProviders **一起使用。如果你仍然不确定创建一个plunker代码应用程序来看看。 – tibbus
这真的很奇怪,因为它应该可以工作。看到这个plunkr:https://plnkr.co/edit/gG84YnQPItRSf0tIJSMK?p=preview。我有兴趣了解更多关于您的环境的知识;-)谢谢! –