EXCEPTION góc: Không có nhà cung cấp cho http


333

Tôi đang nhận được EXCEPTION: No provider for Http!trong ứng dụng Angular của tôi. Tôi đang làm gì sai?

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
Bạn đang mất tích HTTP_PROVIDERS.
Eric Martinez

1
nhập / xuất ... xin vui lòng, bất cứ ai, đây là cú pháp gì?
vp_arth

5
Đó là Syntax Syntax
daniel

10
nhập / xuất - đó là cú pháp JavaScript (ES6)
alexpods

3
Sẽ thật tuyệt nếu một trong những câu trả lời thực sự giải thích lý do tại sao chúng ta cần nhập HttpModulevà những gì nó làm.
Drazen Bjelovuk

Câu trả lời:


520

Nhập httpModule

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

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

platformBrowserDynamic().bootstrapModule(AppModule);

Lý tưởng nhất là bạn chia mã này thành hai tệp riêng biệt. Để biết thêm thông tin đọc:


2
Trong bản Angular2 beta hiện tại, tệp được gọi app.ts.
d135-1r43

7
Trong các dự án tạo angular-cli, tệp được gọi main.ts.
filoxo

Nếu tôi không có NgModule thì sao? Tôi đang phát triển một mô-đun angular2 và nó không có NgModule nhưng để thử nghiệm tôi cần nhà cung cấp http
iRaS

@Webruster tôi mới kiểm tra. Nó vẫn hoạt động. Bạn có thể cho tôi mã lỗi chính xác?
Philip

2
@PhilipMiglinci ... cảm ơn vì câu trả lời có giá trị .. thêm một số điểm cho người tìm kiếm rằng tệp sẽ là app.module.ts trong angular 2.0 để giải thích đây là tệp cốt lõi cho dự án để bao gồm các mô-đun sẽ sử dụng thêm các mô-đun các lớp học.
shaan gola

56

> = Góc 4.3

cho giới thiệu HttpClientModule

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

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

Góc 2> = RC.5

Nhập HttpModulevào mô-đun nơi bạn sử dụng mô-đun (ví dụ ở đây AppModule:

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

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

Nhập khẩu HttpModulekhá giống với việc thêm HTTP_PROVIDERSvào trong phiên bản trước.


9

Với bản phát hành Angular 2.0.0 ngày 14 tháng 9 năm 2016, bạn vẫn đang sử dụng httpModule. Chính của bạn app.module.tssẽ trông giống như thế này:

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

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

Sau đó, trong app.tsbạn có thể bootstrap như vậy:

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

platformBrowserDynamic().bootstrapModule(AppModule);

9

Thêm httpModule để nhập mảng trong tệp app.module.ts trước khi bạn sử dụng nó.

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

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


9

Kể từ RC.5, bạn phải làm một cái gì đó như

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

platformBrowserDynamic().bootstrapModule(AppModule);


5

Nhập HttpModulevào tệp app.module.ts của bạn.

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

Ngoài ra, hãy nhớ khai báo httpModule theo nhập khẩu như dưới đây:

imports: [
    BrowserModule,
    HttpModule
  ],

4

Cách tốt nhất là thay đổi trang trí thành phần của bạn bằng cách thêm http vào mảng nhà cung cấp như bên dưới.

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

Ai đã đánh dấu nó sai, tôi có thể biết lý do là gì không?
Shivang Gupta

5
Tôi đã không downvote, nhưng lý do có lẽ là bạn không muốn một Httpđối tượng mới cho mỗi thành phần. Tốt hơn là có một cái duy nhất cho ứng dụng, được hoàn thành bằng cách nhập nó ở NgModulecấp độ.
Ted Hopp

3

kể từ RC5, bạn cần nhập httpModule như vậy:

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

sau đó bao gồm các HTTPModule trong mảng nhập khẩu như được đề cập ở trên bởi Günter.


3

Chỉ cần bao gồm các thư viện sau:

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

và bao gồm lớp http trong providersphần, như sau:

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

3

Nếu bạn gặp lỗi này trong các thử nghiệm của mình, bạn nên tạo Dịch vụ giả cho tất cả các dịch vụ:

Ví dụ:

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

Và trước đó:

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

3
**

Linh hồn đơn giản: Nhập httpModule và HttpClientModule trên app.module.ts của bạn

**

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

Giải pháp này hoạt động, nhưng HttpModule được đánh dấu là không dùng trong Angular 5.2. Tôi nghĩ rằng một số thành phần không được nâng cấp và vẫn sử dụng triển khai http cũ.
Sobvan 16/03/18

1

Tất cả những gì bạn cần làm là bao gồm các thư viện sau trong tour.module.ts và cũng bao gồm nó trong bản nhập của bạn:

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

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

1

Tôi đã đối mặt với vấn đề này trong mã của tôi. Tôi chỉ đặt mã này trong app.module.ts của tôi.

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

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

1
Xin đừng lặp lại câu trả lời hiện có. Làm như vậy không thêm giá trị cho cộng đồng.
isherwood

1

import { HttpModule } from '@angular/http'; gói trong tệp module.ts của bạn và thêm nó trong nhập khẩu của bạn.


1

Tôi chỉ cần thêm cả hai thứ này trong app.module.ts:

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

&

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

Bây giờ nó hoạt động tốt .... Và đừng quên thêm vào

@NgModule => Imports:[] array

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.