gpt4 book ai didi

angular - 在服务中注入(inject) http 会出现 "No provider for Http!"错误

转载 作者:太空狗 更新时间:2023-10-29 16:53:02 25 4
gpt4 key购买 nike

Angular 版本:2.0.0-beta.13

我正在尝试将 http 注入(inject)服务:

@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 没有被任何 View 直接访问。它只能在 GithubService 内部访问。那么,为什么我必须将 HTTP_PROVIDERS 声明为 viewProvider

编辑2

好吧,我将 providers 声明从 AppComponent 移到了我需要它的组件中,现在它可以工作了!所以在根级别声明它一定有一些怪癖。

@Component({
providers: [HTTP_PROVIDERS, GithubService],
})
export class HttpReqComponent { }

实际上,providersviewProviders 都可以工作。事实证明,viewProviders 实际上限制更多,并且提供了更好的组件封装。参见 this article了解详情。

最佳答案

点击此链接

Angular2/http Exception no ConnectionBackend在使用 Angular 2 快速入门 (https://angular.io/guide/quickstart) 时,@abreneliere 的回答对我来说是正确的,我正在尝试向组件添加服务。

答案:文件:app.module.ts代码:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from "@angular/http";
import { AppComponent } from './app.component';

@NgModule({
imports: [BrowserModule, HttpModule],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }

关于angular - 在服务中注入(inject) http 会出现 "No provider for Http!"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36461708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com