angular – 在服务中注入http会给出“没有Http提供程序!”错误

前端之家收集整理的这篇文章主要介绍了angular – 在服务中注入http会给出“没有Http提供程序!”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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,它可用于其他目的.

你必须确保包含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
    }
}
原文链接:https://www.f2er.com/angularjs/143936.html

猜你在找的Angularjs相关文章