EXCEPCIÓN angular: no hay proveedor para Http


333

Estoy obteniendo el EXCEPTION: No provider for Http!en mi aplicación Angular. ¿Qué estoy haciendo mal?

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
Se echa en falta HTTP_PROVIDERS.
Eric Martinez

1
importar / exportar ... por favor, cualquiera, ¿qué sintaxis es esta?
vp_arth

55
Es sintaxis mecanografiada
daniel

10
importación / exportación - es la sintaxis de JavaScript (ES6)
alexpods

3
Sería bueno si una de las respuestas realmente explicara por qué necesitamos importar HttpModuley qué hace.
Drazen Bjelovuk

Respuestas:


520

Importar el HttpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

Idealmente, divide este código en dos archivos separados. Para más información lea:


2
En la versión actual de Angular2 beta, se llama al archivo app.ts.
d135-1r43

77
En proyectos generados por angular-cli, se llama al archivo main.ts.
filoxo

¿Qué pasa si no tengo un NgModule? Estoy desarrollando un módulo angular2 y no tiene un NgModule, pero para las pruebas necesito un proveedor Http
iRaS el

@Webruster que acabo de comprobar. Aún debería funcionar. ¿Me puede dar el código de error exacto?
Philip

2
@PhilipMiglinci ... gracias por la valiosa respuesta ... agregando algunos puntos para los buscadores de que el archivo sería app.module.ts en angular 2.0 para explicación, este es el archivo central para que el proyecto incluya los módulos que usarán más heredados clases
shaan gola

56

> = Angular 4.3

para el introducido 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

Importar HttpModuleal módulo donde lo usa (aquí, por ejemplo, el AppModule:

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

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

Importar HttpModulees bastante similar a agregar HTTP_PROVIDERSen la versión anterior.


9

Con la versión Angular 2.0.0 del 14 de septiembre de 2016, todavía está utilizando HttpModule. Su principal app.module.tsse vería así:

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

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

Luego, en su app.tspuede arrancar como tal:

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

platformBrowserDynamic().bootstrapModule(AppModule);

9

Agregue HttpModule a la matriz de importaciones en el archivo app.module.ts antes de usarlo.

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

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


9

Desde rc.5 tienes que hacer algo como

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

platformBrowserDynamic().bootstrapModule(AppModule);


5

Importar HttpModuleen su archivo app.module.ts.

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

También recuerde declarar HttpModule bajo importaciones como a continuación:

imports: [
    BrowserModule,
    HttpModule
  ],

4

La mejor manera es cambiar el decorador de su componente agregando Http en la matriz de proveedores como se muestra a continuación.

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

Quien lo haya marcado mal, ¿puedo saber cuál es la razón?
Shivang Gupta

55
No voté en contra, pero la razón probablemente sea que no quieres un nuevo Http objeto para cada componente. Es mejor tener una sola para la aplicación, que se logra importándola en el NgModulenivel.
Ted Hopp

3

a partir de RC5 necesita importar el HttpModule de esta manera:

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

luego incluya el HttpModule en la matriz de importaciones como mencionó anteriormente Günter.


3

Solo incluya las siguientes bibliotecas:

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

e incluya la clase http en la providerssección, de la siguiente manera:

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

3

Si tiene este error en sus pruebas, debe crear un servicio falso para todos los servicios:

Por ejemplo:

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

Y en beforeEach:

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

3
**

Almación simple: importe el HttpModule y HttpClientModule en su 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 { }

Esta solución funciona, pero HttpModule está marcado como obsoleto en Angular 5.2. Creo que algunos componentes no se actualizan y aún usan la antigua implementación Http.
Sobvan

1

Todo lo que necesita hacer es incluir las siguientes bibliotecas en el recorrido app.module.ts y también incluirlo en sus importaciones:

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

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

1

Me enfrenté a este problema en mi código. Solo pongo este código en mi app.module.ts.

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

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

1
Por favor, no repita las respuestas existentes. Hacerlo no agrega valor a la comunidad.
isherwood

1

import { HttpModule } from '@angular/http'; paquete en su archivo module.ts y agréguelo a sus importaciones.


1

Solo agrego ambos en mi app.module.ts:

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

Y

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

Ahora funciona bien ... Y no olvides agregar

@NgModule => Imports:[] array

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.