加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:02:36 所属栏目:安全 来源:网络整理
导读:Angular版本:2.0.0-beta.13 我试图将http注入服务: @Injectable()export class GithubService { ... constructor(private http: Http) { }} 我已将HTTP_PROVIDERS列为我的应用程序的根组件中的提供程序,因此该提供程序应该可用于我的应用程序中的任何组件
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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读