2017-06-04 76 views
2

下面是我的组件文件中的代码片段无法读取的未定义的属性“后” - 角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所以我试图console.log(this.http); POST方法调用之前正确的,那么它的显示浏览器控制台undefined,我尝试了所有可能的解决方案,但无法理解为什么它不工作,请帮助...

在此先感谢! !

+1

你如何调用'saveDetails'?为什么使用'@ Injectable'作为组件? – yurzui

+0

我在我的视图中有以下按钮''按钮类型=“按钮”(点击)=“saveDetails()”class =“btn btn-default”>保存详细信息'我只是单击按钮... @yurzui –

+0

我已经找到解决方案,并将其发布为答案@echonax,我现在无法接受它... –

回答

1

在抓我的头花几个小时阅读所有可能的文章,答案,文档和可能的一切在互联网上之后,我终于找到了解决办法。

刚才我改变了我的构造从

constructor (private http: Http) { } 

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

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

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

+0

你在tsconfig.json中有emitDecoratorMetadata选项吗? – yurzui

2

你必须HTTP_PROVIDERS到任意一个组件供应商阵列像这样:

providers: [HTTP_PROVIDERS] 

编辑

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

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

我已经尝试过,我从'@ angular/http';'然后我添加了'providers:[HTTP_PROVIDERS]',那时候我有错误,说'node_modules/angular2/http/index'没有导出成员'HTTP_PROVIDERS'。' –

+0

到你的模块你做了 – Sajeetharan

+0

你试过从'@ angular/http'导入{HttpModule}; @NgModule({ 进口: HTTP模块 ] }) – Sajeetharan

相关问题