2017-06-04 46 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

相關問題