2017-07-28 69 views
0

我在製作http post,然後試着給subscribe裏面的局部變量賦值。給subscribe裏面的局部變量賦值()

但是,該局部變量代碼行從未被調用。爲什麼?我的代碼有什麼問題?

這是我的組件

submitted = false; 

    onSubmit() { 
    this.leaveService.addLeave(this.model) 
     .subscribe(res => { 
      this.submitted = true; **// This line of code never execute. Why?** 

     }); 

    } 

這是我的服務

addLeave(body: leave): Observable<leave[]> { 
let bodyString = JSON.stringify(body); // Stringify payload 
let headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON 
let options = new RequestOptions({ headers: headers }); // Create a request option 

return this.http.post(this._apiUrl, body, options) 
    .map(res => res.json()) 
    .catch((error: any) => Observable.throw('Error')); 
} 

我的MVC控制器方法(只需添加簡單的一個,以確保往返被罰款)

[HttpPost("[action]")] 
public IActionResult CreateLeaveRequest([FromBody] LeaveModel leave) 
{ 
    return StatusCode(200); 
} 

}

我在控制檯中看不到任何錯誤。 讓我知道你是否需要更多的信息來理解問題。

注:

的onsubmit()絕對稱得上。順序是調用OnSubmit(),它調用服務的addLeave,將請求發送到控制器方法(調試點命中)。

+0

如何調用onSubmit()?從看法?請發佈。還有什麼console.log(res)顯示? – Vega

+1

扔'console.log('testing');'在onSubmit之後查看函數是否被調用。 – joshrathke

+0

確保你在表單上定義了一個ngSubmit(),並在表單中指定了一個按鈕「type =」submit「'。 – joshrathke

回答

1

您的.MAP函數需要返回的東西......

return this.http.post(this._apiUrl, body, options) 
    .map(res => { 
     console.log(res) // Log here to see what you get in response body 
     return res.json() || []; // if response has no json then return [] 
    ) 
    .catch((error: any) => Observable.throw('Error')); 
} 
+0

胖箭頭函數已經返回 – Vega

+1

'.map(res => res.json())'等於'.map(res => {return res.json();})' – echonax

+0

或者爲了避免完全避免.map問題,除非有自定義的事情發生,他可以使用'HttpClientModule'並完全放棄將輸出映射到json,因爲新客戶端已經爲你做了。 – joshrathke

0

傳遞到時可觀察到發出項訂閱執行第一個函數。如果後期不返回一個值,你不手動映射的響應,沒有項目被髮出,不執行此功能:

.subscribe(res => { 
     this.submitted = true; **// This line of code never execute. Why?** 

    }); 

你需要無論是從可觀察的發出物品或者你可以嘗試使用訂閱的第三個參數並在完成時執行代碼而不是在發出時執行。

.subscribe(
     () => {},    **// On emit 
     err => {},    **// On error 
     () => { 
      this.submitted = true; **// On complete ** 
    }); 
+0

嗨@DeborahK,謝謝你的詳細回覆。不過,我不這麼認爲你是對的。實際的問題是我沒有返回從服務器到被叫(客戶端)的JSON響應,因此他的線路在我的服務中---「。map(res => res.json())」---失敗,並且導致訂閱()沒有被實際訂閱/調用。 Andrea Stalker很好地確定了它並解決了我的問題。如果這能提高我的理解,我很樂意從你身邊尋找更多的東西。乾杯 – simbada