2016-12-24 85 views
11

我看到Response.json()方法被使用了很多,我自己使用它,但是我缺少一些東西或者Response類的文檔不正確。Angular Response.json()沒有記錄

實施例:

getCurrentTime() { 
    return this._http.get('http://date.jsontest.com/') 
     .map((res:Response) => res.json()) 
} 

在角部位在https://angular.io/docs/ts/latest/api/http/index/Response-class.html,我沒有看到該方法作爲響應類的成員。

如果.json是而不是 Response類的成員,有人可以指導我理解它是如何工作的。

或者如果文檔有誤,有人請說出來。

在此先感謝。

回答

5

實際上,HTTP客戶端文件(Process the response object) 說:

解析成JSON

這是沒有棱角的自己的設計。 Angular HTTP客戶端遵循提取函數返回的響應對象的提取規範。該規範定義了一個將響應正文解析爲JavaScript對象的方法。

所以Angular2實現Fetch Specification,其包括用於所提到的Body mixin說明書中,Angular2的Response類延伸,包括.json()方法。

json()方法在被調用時必須返回運行帶有JSON的消費體的結果。

正如您在peeskillet的鏈接中所看到的,Angular2正在實現Body mixin的所有指定方法,但formData()除外。

13

我看看API Reference for Response,你會看到Response延伸到Body。如果您嘗試搜索Body,則不會找到它,這可能意味着它不公開。如果你看一下the source code for Body,你會看到代碼json

/** 
* Attempts to return body as parsed `JSON` object, or raises an exception. 
*/ 
json(): any { 
    if (typeof this._body === 'string') { 
    return JSON.parse(<string>this._body); 
    } 

    if (this._body instanceof ArrayBuffer) { 
    return JSON.parse(this.text()); 
    } 

    return this._body; 
} 

讓我知道如果你需要源的解釋。儘管如此,它看起來很自我解釋。

+0

哦,夥計。當然這很明顯。非常感激。我是Angular2的新手,對文檔也不熟悉。我很驚訝API沒有顯示繼承方法的鏈接。 – BBaysinger

+0

也許你也可以向我解釋爲什麼我的問題被拒絕了。我意識到我忽略了一些可能顯而易見的事情,但它不是一個合理的問題? – BBaysinger

+0

我不知道。人們有他們的理由。我不能猜測爲什麼。我個人認爲沒有錯。我不會回答我投反對票的問題。 –