각도 예외 : HTTP 공급자 없음


333

EXCEPTION: No provider for Http!Angular 앱을 받고 있습니다. 내가 뭘 잘못하고 있죠?

import {Http, Headers} from 'angular2/http';
import {Injectable} from 'angular2/core'


@Component({
    selector: 'greetings-ac-app2',
    providers: [],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})
export class GreetingsAcApp2 {
    private str:any;

    constructor(http: Http) {

        this.str = {str:'test'};

        http.post('http://localhost:18937/account/registeruiduser/',
            JSON.stringify(this.str),
            {
                headers: new Headers({
                    'Content-Type': 'application/json'
                })
            });

3
당신이 없습니다 HTTP_PROVIDERS.
Eric Martinez

1
가져 오기 / 내보내기 ... 제발, 누구든지, 이것이 어떤 구문입니까?
vp_arth

5
daniel

10
가져 오기 / 내보내기
-JavaScript

3
답변 중 하나가 실제로 import HttpModule해야하는지, 그리고 무엇 을 하는지 설명하면 좋을 것 입니다.
Drazen Bjelovuk

답변:


520

HttpModule 가져 오기

import { HttpModule } from '@angular/http';

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

platformBrowserDynamic().bootstrapModule(AppModule);

이상적으로이 코드를 두 개의 별도 파일로 분할합니다. 자세한 내용은 다음을 읽으십시오.


2
현재 Angular2 베타에서는 파일을이라고 app.ts합니다.
d135-1r43

7
앵귤러 클리 생성 프로젝트에서는 파일을이라고 main.ts합니다.
filoxo

NgModule이 없으면 어떻게합니까? angular2 모듈을 개발 중이며 NgModule이 없지만 테스트를 위해서는 HTTP 공급자가 필요합니다
iRaS

@Webruster 방금 확인했습니다. 여전히 작동합니다. 정확한 오류 코드를 알려주시겠습니까?
Philip

2
@PhilipMiglinci ... 귀중한 답변에 감사드립니다 .. 파일 을 설명하기 위해 angular 2.0에서 app.module.ts 파일을 찾는 사람들에게 몇 가지 요점 추가 하기 이것은 더 상속 된 모듈을 포함하는 프로젝트의 핵심 파일입니다 클래스.
shaan gola

56

> = 각도 4.3

소개 HttpClientModule

import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpClientModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

각도 2> = RC.5

HttpModule사용하는 모듈로 가져 옵니다 (예 AppModule:

import { HttpModule } from '@angular/http';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule, // if used
    HttpModule,
    JsonpModule // if used
  ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }

를 가져 오는 것은 이전 버전 HttpModule을 추가하는 것과 매우 유사합니다 HTTP_PROVIDERS.


9

2016 년 9 월 14 일 Angular 2.0.0 릴리스에서는 HttpModule을 계속 사용하고 있습니다. 당신의 메인 app.module.ts은 다음과 같이 보일 것입니다 :

import { HttpModule } from '@angular/http';

@NgModule({
   bootstrap: [ AppComponent ],
   declarations: [ AppComponent ],
   imports: [
      BrowserModule,
      HttpModule,
      // ...more modules...
   ],
   providers: [
      // ...providers...
   ]
})
export class AppModule {}

그런 다음 다음 app.ts과 같이 부트 스트랩을 만들 수 있습니다.

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/main/app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

9

HttpModule을 추가하여 사용하기 전에 app.module.ts 파일 에서 배열을 가져옵니다 .

import { HttpModule } from '@angular/http';

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


9

rc.5 부터는 다음과 같은 작업을 수행해야합니다.

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

platformBrowserDynamic().bootstrapModule(AppModule);


5

HttpModuleapp.module.ts 파일로 가져 옵니다.

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

또한 아래와 같이 가져 오기에서 HttpModule을 선언해야합니다.

imports: [
    BrowserModule,
    HttpModule
  ],

4

가장 좋은 방법은 다음과 같이 공급자 배열에 Http를 추가하여 구성 요소의 데코레이터를 변경하는 것입니다.

@Component({
    selector: 'greetings-ac-app2',
    providers: [Http],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})

누가 잘못 표시했는지, 이유가 무엇인지 알 수 있습니까?
Shivang Gupta

5
나는 공감하지 않았지만 그 이유는 아마도 Http각 구성 요소마다 새로운 객체를 원하지 않기 때문일 것입니다 . 앱에 단일 앱을 가져 오는 것이 NgModule좋습니다. 앱을 레벨 에서 가져 와서 수행 합니다.
Ted Hopp

3

RC5부터 다음과 같이 HttpModule을 가져와야합니다.

import { HttpModule } from '@angular/http';

그런 다음 Günter가 위에서 언급 한 것처럼 imports 배열에 HttpModule을 포함시킵니다.


3

다음 라이브러리 만 포함하십시오.

import { HttpModule } from '@angular/http';
import { YourHttpTestService } from '../services/httpTestService';

providers다음과 같이 섹션에 http 클래스를 포함하십시오 .

@Component({
  selector: '...',
  templateUrl: './test.html',
  providers: [YourHttpTestService]

3

테스트에서이 오류가 발생하면 모든 서비스에 대해 가짜 서비스를 작성해야합니다.

예를 들면 다음과 같습니다.

import { YourService1 } from '@services/your1.service';
import { YourService2 } from '@services/your2.service';

class FakeYour1Service {
 public getSomeData():any { return null; }
}

class FakeYour2Service {
  public getSomeData():any { return null; }
}

그리고 전에 :

beforeEach(async(() => {
  TestBed.configureTestingModule({
    providers: [
      Your1Service,
      Your2Service,
      { provide: Your1Service, useClass: FakeYour1Service },
      { provide: Your2Service, useClass: FakeYour2Service }
    ]
  }).compileComponents();  // compile template and css
}));

3
**

간단한 soultion : app.module.ts 에서 HttpModule 및 HttpClientModule 가져 오기

**

import { HttpClientModule } from '@angular/common/http';
import { HttpModule } from '@angular/http';



@NgModule({
 declarations: [
   AppComponent, videoComponent, tagDirective, 
 ],
 imports: [
  BrowserModule, routing, HttpClientModule, HttpModule

],
providers: [ApiServices],
bootstrap: [AppComponent]
})
export class AppModule { }

이 솔루션은 작동하지만 HttpModule은 Angular 5.2에서 더 이상 사용되지 않는 것으로 표시됩니다. 일부 구성 요소가 업그레이드되지 않았으며 여전히 이전 Http 구현을 사용한다고 생각합니다.
Sobvan

1

둘러보기 app.module.ts에 다음 라이브러리를 포함시키고 가져 오기에 포함 시키기 만하면 됩니다.

import { HttpModule } from '@angular/http';

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

1

내 코드 에서이 문제에 직면했습니다. 이 코드는 app.module.ts에만 넣습니다.

import { HttpModule } from '@angular/http';

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

1
기존 답변을 반복하지 마십시오. 그렇게한다고해서 커뮤니티에 가치가 추가되는 것은 아닙니다.
isherwood

1

import { HttpModule } from '@angular/http'; package.ts 파일에 패키지를 가져오고 가져 오기에 추가하십시오.


1

app.module.ts에 두 가지를 모두 추가하면됩니다.

"import { HttpClientModule }    from '@angular/common/http'; 

&

import { HttpModule } from '@angular/http';"

이제는 잘 작동합니다 .... 그리고에 추가하는 것을 잊지 마십시오

@NgModule => Imports:[] array

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.