abhiklpm
abhiklpm

Reputation: 1653

Angular 4 and Ionic 3 No provider for HTTP

I have a service which imports Http, and when I use it in my app it throws error. "No provider for Http! Error at g injectionError". I am lazyloading the app. Also the provider was generated through cli "ionic g provider ..."

complaint-service.ts

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class ComplaintService {
    private complaints: {subject: string, description: string}[] = [];

    constructor(public http: Http) {
        this.http = http;
        this.complaints = null;
        console.log('Hello ComplaintService Provider');
    }

    addComplaints(complaint: {subject: string, description: string}) {
        this.complaints.push(complaint);
    }

    getComplaints() {
        return this.complaints.slice();
    }

}

complaint-form.ts

import { Component } from '@angular/core';
import {Validators, FormBuilder, FormGroup } from '@angular/forms';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import {ComplaintService} from '../../providers/complaint-service';


@IonicPage()
@Component({
  selector: 'page-complaint-form',
  templateUrl: 'complaint-form.html',
  providers: [ComplaintService]
})
export class ComplaintForm {

}

Any suggestions?

Upvotes: 24

Views: 26108

Answers (4)

Biswajit
Biswajit

Reputation: 1037

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

@NgModule({
  declarations: [
    ChatPage,
  ],
  imports: [
    IonicPageModule.forChild(ChatPage),
    HttpModule,
    HttpClientModule,// add HttpClientModule to import
    SocketIoModule.forRoot(config)
  ],

})

Dont forget to run with ionic cordova run browser because you need a platform to run cordova plugins

Upvotes: 0

Darpan
Darpan

Reputation: 140

HttpModule is deprecated in the latest version of ionic3 and Angular5. So, you have to use HttpClientModule instead of HttpModule. Other things will be same as @devqon's answer. After that, you can use HttpClient in your service or component file.

For more info, please refer to the original document of Angular.

https://angular.io/guide/http

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

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

Upvotes: 0

Maheswaran Ravisankar
Maheswaran Ravisankar

Reputation: 17920

Add HTTP to the providers list as well. (to AppModule)

import { HTTP } from '@ionic-native/http';

And

  providers: [
    ...,
    HTTP 
  ]

Working with Angulat5+, Ionic 3+

Upvotes: 4

devqon
devqon

Reputation: 13997

You have to register the HttpModule to your module (/app.module.ts):

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

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

Upvotes: 67

Related Questions