Свойство Angular 2 не существует для типа
У меня есть класс как
export class R {
constructor(
public id: Number,
public dte: Date,
) { }
}
Служба, которая возвращает R[] код:
return this.http.get(this.serverLocal).map(this.formatDate);
formatDate(res: Response) {
const data = res.json() as R[];
data.forEach(D => {
D.dte = new Date(D.dte);
})
return data;
}
Я получаю 2 ошибки: свойство "dte" не существует для типа "R". Я изменил много кода безрезультатно. Это работает, если я делаю некоторые изменения с ID, но не с датой даты. Что я делаю неправильно?
1 ответ
Прежде чем ответить, посмотрите на HttpClient, если вы используете Angular 5 в качестве json()
больше не нужно. Http get уже возвращает json по умолчанию.
Если ваш ответ JSON имеет только эти две записи (id
а также dte
) вам просто нужно сделать следующее:
. . .
import { HttpClient } from '@angular/common/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl);
}
Если вам нужна обработка ошибок или, например, повторите попытку, если запрос выдает ошибку, вы должны сделать что-то вроде:
. . .
import { HttpClient } from '@angular/common/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl)
.pipe(
retryWhen(errors =>
// Do Stuff
),
catchError((error: Error) => {
return Observable.throw(error);
})
);
}
На самом деле нет необходимости отображать данные, но, если вы хотите это сделать, вы должны сделать так: "
data.map((dataEntry) => new R(dataEntry))
Если вы все еще используете Angular 4.xx, вы должны получить:
. . .
import { Http } from '@angular/http';
/** rxjs **/
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import {catchError} from 'rxjs/operators/catchError';
getStuff(someUrl: string): Observable<Array<R>> {
return this.http.get(someUrl)
.pipe(
map((response: Response) => response.json()),
catchError((error: Error) => {
return Observable.throw(error);
})
);
}