EXCEÇÃO Angular: Nenhum provedor para Http

333

Estou recebendo o EXCEPTION: No provider for Http!aplicativo Angular. O que estou fazendo errado?

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'
                })
            });
daniel
fonte
3
Você está desaparecido HTTP_PROVIDERS.
Eric Martinez
11
importar / exportar ... por favor, alguém, que sintaxe é essa?
vp_arth
5
É Sintaxe de texto datilografado
daniel
10
importação / exportação - é sintaxe JavaScript (ES6)
alexpods
3
Seria bom se uma das respostas realmente explicasse por que precisamos importar HttpModulee o que faz.
Drazen Bjelovuk

Respostas:

520

Importar o HttpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

Idealmente, você divide esse código em dois arquivos separados. Para mais informações, leia:

Philip
fonte
2
No Angular2 beta atual, o arquivo é chamado app.ts.
precisa saber é o seguinte
7
Nos projetos gerados por angular-cli, o arquivo é chamado main.ts.
Filoxo 16/05
e se eu não tiver um NgModule? Estou desenvolvendo um módulo angular2 e ele não tem um NgModule mas para testes eu preciso Http provedor
IRAS
@ Webruster Acabei de verificar. Ainda deve funcionar. Você pode me fornecer o código de erro exato?
Philip
2
@PhilipMiglinci ... obrigado pela resposta valiosa .. adicionando alguns pontos para os buscadores de que o arquivo seria app.module.ts no angular 2.0 para obter explicação, este é o arquivo principal do projeto para incluir os módulos que serão usados ​​mais herdados Aulas.
gola shaan
56

> = Angular 4.3

para o introduzido HttpClientModule

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

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

Angular2> = RC.5

Importe HttpModulepara o módulo em que você o usa (aqui, por exemplo, o AppModule:

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

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

Importar o HttpModuleé bem parecido com adicionar HTTP_PROVIDERSna versão anterior.

Günter Zöchbauer
fonte
9

Com a versão Angular 2.0.0 de 14 de setembro de 2016, você ainda está usando o HttpModule. Seu principal app.module.tsseria algo parecido com isto:

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

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

Então, no seu, app.tsvocê pode iniciar como tal:

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

platformBrowserDynamic().bootstrapModule(AppModule);
Caleb
fonte
9

Adicione HttpModule à matriz de importações no arquivo app.module.ts antes de usá-lo.

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

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

Surendra Parchuru
fonte
9

Desde rc.5 você tem que fazer algo como

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

platformBrowserDynamic().bootstrapModule(AppModule);
Adrian Ber
fonte
6

porque foi apenas na seção de comentários que repito a resposta de Eric:

Eu tive que incluir HTTP_PROVIDERS

daniel
fonte
2
... Além disso, HTTP_PROVIDERS foi preterido. É agora chamado HttpModule .. stackoverflow.com/questions/38903607/...
Mike Gledhill
5

Importe HttpModuleno seu arquivo app.module.ts.

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

Lembre-se também de declarar HttpModule sob importações, como abaixo:

imports: [
    BrowserModule,
    HttpModule
  ],
poo arasan
fonte
4

A melhor maneira é mudar o decorador do seu componente adicionando Http na matriz de fornecedores, conforme abaixo.

@Component({
    selector: 'greetings-ac-app2',
    providers: [Http],
    templateUrl: 'app/greetings-ac2.html',
    directives: [NgFor, NgModel, NgIf, FORM_DIRECTIVES],
    pipes: []
})
Shivang Gupta
fonte
Quem marcou errado, posso saber qual é o motivo?
Shivang Gupta
5
Não diminuí a votação, mas o motivo é provavelmente que você não deseja um novo Httpobjeto para cada componente. Melhor ter um único para o aplicativo, o que é conseguido importando-o no NgModulenível.
Ted Hopp
3

a partir do RC5, você precisa importar o HttpModule da seguinte forma:

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

inclua o HttpModule na matriz de importações, conforme mencionado acima por Günter.

mareks
fonte
3

Basta incluir as seguintes bibliotecas:

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

e inclua a classe http na providersseção, da seguinte maneira:

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

Se você tiver esse erro em seus testes, deverá criar o Serviço Falsificado para todos os serviços:

Por exemplo:

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; }
}

E antes de cada:

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

Soultion simples: importe o HttpModule e o HttpClientModule no seu app.module.ts

**

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 { }
Shashwat Gupta
fonte
Essa solução funciona, mas o HttpModule está marcado como obsoleto no Angular 5.2. Eu acho que algum componente não é atualizado e ainda usa a antiga implementação Http.
Sobvan 16/0318
1

Tudo o que você precisa fazer é incluir as seguintes bibliotecas no tour app.module.ts e incluí-lo em suas importações:

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

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

Eu enfrentei esse problema no meu código. Eu apenas coloquei esse código no meu app.module.ts.

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

@NgModule({
  imports:      [ BrowserModule, HttpModule ],
  declarations: [ AppComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule { }
Saurabh
fonte
11
Por favor, não repita as respostas existentes. Fazer isso não agrega valor à comunidade.
Isherwood
1

import { HttpModule } from '@angular/http'; pacote no seu arquivo module.ts e adicione-o em suas importações.

Alekya
fonte
1

Acabei de adicionar ambos no meu app.module.ts:

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

&

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

Agora funciona bem ... E não se esqueça de adicionar o

@NgModule => Imports:[] array

Dibya Prakash Das
fonte