我有一個Angular 2應用程序。服務是從返回的結果就像一個API請求數據如下:Angular 2日期反序列化
{
"data":[
{"id":1,"timestamp":"2016-04-17T19:52:53.4510935+01:00","sourceDatabaseServer":"127.0.0.1","sourceDatabaseName":"Database1","targetDatabaseServer":"192.168.99.101","targetDatabaseName":"Database2"},
{"id":2,"timestamp":"2016-04-17T19:52:53.4510935+01:00","sourceDatabaseServer":"127.0.0.2","sourceDatabaseName":"Database3","targetDatabaseServer":"192.168.99.102","targetDatabaseName":"Database4"},
{"id":3,"timestamp":"2016-04-17T19:52:53.4510935+01:00","sourceDatabaseServer":"127.0.0.3","sourceDatabaseName":"Database5","targetDatabaseServer":"192.168.99.103","targetDatabaseName":"Database6"}
]
}
我的角2服務看起來是這樣的(我剪的錯誤處理,簡潔,因爲我們是幸福的道路上這裏) :
getList() : Observable<SomeModel[]> {
return this._http.get(this._getListUrl).map(this.extractData);
}
private extractData(res: Response) {
return res.json().data || {};
}
和我的組件是這樣的:
results: SomeModel[];
errorMessage: string;
ngOnInit() {
this._someService.getList()
.subscribe(
results => this.results = results,
error => this.errorMessage = <any>error);
}
和我的模型是這樣的:
export class SomeModel {
constructor(
public id: number,
public timestamp: Date,
public sourceDatabaseServer: string,
public sourceDatabaseName: string,
public targetDatabaseServer: string,
public targetDatabaseName: string
) { }
}
一切看起來不過是工作,當我嘗試使用DatePipe像這樣{{item.timestamp | date:'short'}}
顯示時間戳應用吹了以下錯誤消息:
Invalid argument '2016-04-17T19:40:38.2424240+01:00' for pipe 'DatePipe' in [{{result.timestamp | date:'short'}}
經過一番調查後相信時間戳是不實際被轉換爲Date
類型,而是被設置爲string
。我猜這是因爲Date
類型在當時不知道Response.json()
被稱爲?還是我完全錯過了別的東西?有沒有修復或解決這個問題?
當你做一個'以.json()'不會改變一個字符串(即使是在一些日期格式)和實際日期對象。它將繼續作爲一個字符串。所以你需要'new Date(herePassTheString)' – arg20
如果你只顯示它,Angular 2中的DatePipe現在可以使用ISO字符串格式。 https://angular.io/docs/ts/latest/api/common/index/DatePipe-pipe.html我不知道這是否一直如此,但現在。 ;) – Derrick