Javascript 无法读取属性';邮政';未定义-角度2的定义

Javascript 无法读取属性';邮政';未定义-角度2的定义,javascript,angular,typescript,angular-http,Javascript,Angular,Typescript,Angular Http,下面是我的组件文件中的代码片段 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/toP

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

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方法时,它说
无法读取未定义的属性“post”
,所以我尝试了
console.log(this.http)
在post方法调用之前,它在浏览器控制台中显示
undefined
,我尝试了所有可能的解决方案,但无法理解为什么它不起作用,请帮助


提前感谢

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

providers: [HTTP_PROVIDERS]
编辑

HTTP_提供程序已弃用。改为导入http模块

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

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

你可以在这里查

HttpModule是进行HTTP调用所必需的。[……]


在花了几个小时挠头,阅读了所有可能的文章、答案、文档以及互联网上可能提供的一切之后,我终于找到了解决方案

我刚将我的构造函数从

constructor (private http: Http) { }

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


谢谢大家帮助我…

我已经试过了,我从'@angular/HTTP'添加了
import{HTTP_提供者,HTTP,响应,头,请求选项}
然后我添加了
提供者:[HTTP_提供者]
,当时我收到一个错误,说
“node_modules/angular2/HTTP/index”没有导出的成员“HTTP_提供者”。
你有没有尝试从“@angular/HTTP”导入{HttpModule}@NgModule({imports:[HttpModule]})它已经在那里了
import{HttpModule}来自'@angular/http'
@NgModule({imports:[BrowserModule,FormsModule,HttpModule],declarations:[MyComponent],bootstrap:[MyComponent],providers:[]})
在我的模块文件中实际上您不需要HTTP_提供程序,添加HttpModule应该可以工作。如何调用
saveDetails
?为什么要对组件使用
@Injectable
?我的视图中有以下按钮
保存详细信息
,我只需单击该按钮@yurzuiI已经找到了解决方案,并将其发布为answer@echonax,我现在无法接受……感谢您的努力,朋友,我已经找到了解决方案,并将其发布在下面……您在tsconfig.json中是否有emitdecoratormatadata选项?
constructor (@Inject(Http) private http:Http) { }