Tôi có ứng dụng Angular 2. Dịch vụ yêu cầu dữ liệu từ api trả về kết quả như sau:Góc 2 Ngày deserialization
{
"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"}
]
}
Dịch vụ Angular 2 của tôi trông như thế này (Tôi đã cắt lỗi xử lý ngắn gọn khi đang trên đường hạnh phúc) :
getList() : Observable<SomeModel[]> {
return this._http.get(this._getListUrl).map(this.extractData);
}
private extractData(res: Response) {
return res.json().data || {};
}
và thành phần của tôi như thế này:
results: SomeModel[];
errorMessage: string;
ngOnInit() {
this._someService.getList()
.subscribe(
results => this.results = results,
error => this.errorMessage = <any>error);
}
và mô hình của tôi như thế này:
export class SomeModel {
constructor(
public id: number,
public timestamp: Date,
public sourceDatabaseServer: string,
public sourceDatabaseName: string,
public targetDatabaseServer: string,
public targetDatabaseName: string
) { }
}
Mọi thứ trông giống như nó đã làm việc tuy nhiên khi tôi cố gắng để hiển thị dấu thời gian bằng cách sử dụng DatePipe như vậy {{item.timestamp | date:'short'}}
ứng dụng thổi lên với thông báo lỗi sau:
Invalid argument '2016-04-17T19:40:38.2424240+01:00' for pipe 'DatePipe' in [{{result.timestamp | date:'short'}}
Sau một số cuộc điều tra tôi tin rằng dấu thời gian không phải là thực sự đang được chuyển đổi thành loại Date
nhưng thay vì chỉ được đặt là string
. Tôi đoán điều này là do loại Date
không được biết tại thời điểm Response.json()
được gọi? hoặc tôi thiếu cái gì khác hoàn toàn? Có một sửa chữa hoặc làm việc xung quanh cho điều này?
Khi bạn làm một '.json() 'rằng sẽ không chuyển đổi một chuỗi (ngay cả khi nó trong một số định dạng ngày) đến một đối tượng ngày thực tế. Nó sẽ tiếp tục là một chuỗi. vì vậy bạn cần phải làm 'new Date (herePassTheString)' – arg20
Nếu bạn chỉ hiển thị nó, DatePipe trong Angular 2 bây giờ có thể sử dụng định dạng chuỗi ISO. https://angular.io/docs/ts/latest/api/common/index/DatePipe-pipe.html Tôi không biết nếu điều này đã luôn luôn được các trường hợp, nhưng nó là ngay bây giờ. ;) – Derrick