Я ищу правильный способ сопоставления объектов из моей базы данных Firebase в реальном времени через службу Angular в массив объектов.Имеется следующий объект.
В настоящее время я пытался использовать AngularFireMap
, а также Observable
с типом array.
Вот мой интерфейс дляобъект маркера.
export interface IGeometry {
type: string;
coordinates: number[];
}
export interface IGeoJson {
type: string;
geometry: IGeometry;
properties?: any;
$key?: string;
}
export class GeoJson implements IGeoJson {
type = 'Feature';
geometry: IGeometry;
constructor(coordinates, public properties?) {
this.geometry = {
type: 'Point',
coordinates
};
}
}
export class FeatureCollection {
type = 'FeatureCollection';
constructor(public features: Array<GeoJson>) {}
}
В настоящее время я пытался отобразить объект, который я получаю из БД в реальном времени Firebase, по объекту маркера через .valueChanges()
, и он работает хорошо, но мне нужен ключ $ из базы данных дляидентификация маркера, но если я хочу работать с .snapshotChanges()
, это не очень хорошо работает, на самом деле я не могу правильно отобразить объекты для получения массива объектов.
Вот моя текущая попыткадля функции в моем Сервисе, чтобы правильно получить все маркеры карты.
public getMarkers(): Observable<GeoJson[]> {
return this.db.list('/markers')
.snapshotChanges()
.pipe(
map(data => {
let geoData: GeoJson[];
data.forEach( singleData => {
// @ts-ignore
geoData.push(singleData.payload.val());
});
return geoData;
}));
}