Angular版本:2.0.0-beta.13
我试图将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)
我究竟做错了什么?
编辑
我将提供者更改为viewProviders,错误现在消失了!
@Component({ viewProviders: [HTTP_PROVIDERS],我无法解释为什么这是有效的.任何视图都不会直接访问http.它只能在GithubService中访问.那么为什么我必须将HTTP_PROVIDERS声明为viewProvider?编辑2
好吧,我将提供者声明从AppComponent移动到我需要它的组件,现在它可以工作了!因此,在根级别声明它必定有一些怪癖.
@Component({ providers: [HTTP_PROVIDERS,GithubService],}) export class HttpReqComponent { }实际上,提供者和viewProviders都有效.事实证明,viewProviders实际上更具限制性,并提供更好的组件封装.有关详情,请参见this article.
如果你选择Providers:[HTTP_PROVIDERS],可以将HTTP_PROVIDERS引用到bootstrap()中.您不需要使用viewProvider,它可用于其他目的.
原文链接:https://www.f2er.com/angularjs/143936.html你必须确保包含http.dev.js(通过CDN / node_modules).
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.13/http.dev.js"></script>
然后在rootComponent中
import {HTTP_PROVIDERS} from 'angular2/http'; import {GithubService} from './GithubService'; bootstrap(rootComponent,[HTTP_PROVIDERS,GithubService]); // if you reference HTTP_PROVIDERS here globally (in bootstrap),you don't require to use providers:[HTTP_PROVIDERS] in any component. // same way GithubService reference has been passed globally which would create single instance of GithubService (In case if you want)
然后在GithubService中
import {Http} from 'angular2/http'; @Injectable() export class GithubService { ... constructor(private http: Http) { // this will work now without any error } }