无法读取未定义的 属性 'post' - Angular 2

Cannot read property 'post' of undefined - Angular 2

下面是我的组件文件中的代码片段

import { Component,Injectable,Inject,OnInit, OnDestroy, EventEmitter,Output } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/switchMap';
...
@Injectable()
export class MyComponent {
    constructor (private http: Http) { }
    saveDetails()
    {
        var response:any;
        var body       = customer_details;
        var headers    = new Headers({ 'Content-Type': 'application/json' });
        var options    = new RequestOptions({ headers: headers });
        this.http.post("/user/add-customer-details", body, options)
            .map((res:Response) => res.json()).subscribe(
                data => { response = data},
                err => console.error(err),
                () => {
                    console.log(response);
                }
        );
    }
}

没有编译错误或任何其他错误,但是 当我调用 post 方法时它说 Cannot read property 'post' of undefined 所以我在 post 方法调用之前尝试 console.log(this.http); ,然后它在浏览器控制台中显示 undefined ,我尝试了所有可能的解决方案,但无法理解为什么它不起作用,请帮助...

提前致谢!!!

您必须将 HTTP_PROVIDERS 添加到组件提供程序数组中,如下所示:

providers: [HTTP_PROVIDERS]

编辑

HTTP_PROVIDERS 已弃用。改为导入 http 模块。

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

您需要将 HttpModule 添加到您的 NgModule 以进行依赖注入。

你可以在这里查看https://angular.io/docs/ts/latest/guide/server-communication.html#!#http-providers

The HttpModule is necessary for making HTTP calls. [...]

在花了几个小时挠头并阅读了所有可能的文章、答案、文档以及可能在 Internet 上可用的所有内容之后,我终于找到了解决方案。

我刚刚更改了我的构造函数

constructor (private http: Http) { }

constructor (@Inject(Http) private http:Http) { }

虽然 @Inject 是一个实验性装饰器,但它正在工作

谢谢大家对我的帮助...