Когда я пытаюсь вызвать метод моего class (getCoordinates()), я получаю следующую ошибку:
ERROR TypeError: this.locations[0].getCoordinates is not a function
Где моя ошибка?
Мой метод обслуживания:
getLocations(){
return this.http.get<Location[]>(this.locationUrl);
}
Моя модель:
export class Location {
id: number;
objectTypeId: number;
type: string;
fields: Fields;
fav: boolean;
typeless: boolean;
pages: number;
lastmodified: string;
public getCoordinates(): number {
return this.id;
}
}
export class Fields {
city: string;
street: string;
company: string;
plz: string;
info: string;
}
Мой компонент:
public locations: Array<Location> = [];
ngOnInit() {
this.getAddresses();
}
getAddresses() {
this.enaioService.getLocations()
.subscribe(data =>
this.locations = data,
(error: HttpErrorResponse) => this.errorMessage = error.message
);
}
onClick() {
console.info(this.locations[0].getCoordinates()); // Here the error occurs
}
https://stackblitz.com/edit/angular-bjgtn4
Мой проект: https://bitbucket.org/sven_hagemann/myproject/src/master/
Клон: git clone https://[email protected]/sven_hagemann/myproject.git
Не будет ли this.http.get<Location[]>(this.locationUrl); возвращать какие-то наблюдаемые данные, которые дадут данные JSON (которые вы приводите к типу Location). Или под всем этим происходит какая-то магия? Можете прислать дамп содержимого this.locations?
Пожалуйста, укажите данные, которые вы получаете в this.locations[0]. Будет полезно решить вашу проблему.
@Phillip: местоположения: Array<Location> = [];
@SunnyParekh -> this.locations[0]: {id: "47973", objectTypeId: "6", type: "FOLDER", fields: {…}, fav: false, …} fav: false fields: {city: "Henstedt-Ulzburg", улица: "Hamburger Straße 55", компания: "# 300 339 #", plz: "24558", информация: ""} id: "47973" lastmodified: "1538143201000" objectTypeId: "6" pages : 0 тип: "ПАПКА" без типа: false proto: Object
@David: значение this.locations[0] см. в сообщении ранее.
@SNMP хорошо. В этом объекте вы пытаетесь вызвать метод getCoordinates. И я не вижу этого в объекте нигде. Итак, вы можете объяснить, что вы хотите, вызвав этот метод? Это какое-то свойство, к которому вы пытаетесь получить доступ? Просьба уточнить.
Вот ссылка на stackbiz: stackblitz.com/edit/angular-bjgtn4





Попробуй это
getLocations(): Observable<Location[]>{
return this.http.get<Location[]>(this.locationUrl)
.pipe(map( (items: any[]) =>
items.map(i => Object.assign(new Location(), i)); ));
}
Спасибо, Самир, но это еще не решает мою проблему.
какова ценность объекта this.locations[0]?
Привет Самир, вот значение: {id: "47973", objectTypeId: "6", type: "FOLDER", fields: {…}, fav: false, …} fav: false fields: {city: "Henstedt-Ulzburg ", улица: "Hamburger Straße 55", компания: "# 300 339 #", plz: "24558", информация: ""} id: "47973" lastmodified: "1538143201000" objectTypeId: "6" pages: 0 type: "ПАПКА" без типа: false прото: Объект
попробуйте удалить модификатор общего доступа. Я не уверен, с какой проблемой вы столкнулись
Я сделал это, но, к сожалению, результат тот же.
Затем вам нужно создать ссылку stackbiz. если хотите больше помощи
Это связано с тем, что список Location объектов, полученных из вашего getLocations метода, не является экземпляром класса Location. Теперь у вас есть просто синтаксический сахар машинописного текста, говорящий, что то, что возвращает getLocationsдолжен, имеет свойства класса Location, но это не обязательно.
Вам нужно изменить свой код следующим образом, чтобы вернуть реальные экземпляры класса Location
import {map} from "rxjs/operators";
getLocations(): Observable<Location[]>
{
return this.http.get(this.locationUrl).pipe
(map( (items: any[]) => items.map(i => Object.assign(new Location(), i));
));
}
почему мне нужно перебирать все элементы. Должен быть какой-то более простой способ сделать это.
@ Самир, я не думаю, что есть другой способ. У вас есть список объектов, из которых вы хотите создать экземпляры класса Location, поэтому вам нужно сделать это для каждого элемента.
Проверьте, каково значение
this.locations[0]