Привязать данные AngularFire к свойству после ожидания данных asyn c - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу get заданный c документ из Firestore с AngularFire с использованием URL-параметров, содержащий координаты широты и долготы, а затем привязать эти координаты к свойству [center] компонента google-map, чтобы динамически отображать карту в зависимости от какой предмет просматривается. Но данные не подключаются к свойству карты Google, поэтому по умолчанию используется центр Google HQ.

Главный компонент List передает идентификатор события в URL-адресе hike/:hikeId, который я извлечь и затем использовать AngularFire для получения документа.

hike-detail.component. html

<h1>Hike Detail</h1>
<h3>Name: <span>{{ (hikeInfo | async)?.name }}</span></h3>  // Displays Hike A
<google-map
    [center]="hikeInfo.center | async"
    width="100%">
</google-map>

hike-detail.component.ts

import { Component, OnInit, Input } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { Location } from '@angular/common';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
import { Observable } from 'rxjs';
import { stringify } from 'querystring';
import { map } from 'rxjs/operators';


@Component({
  selector: 'app-hike-detail',
  templateUrl: './hike-detail.component.html',
  styleUrls: ['./hike-detail.component.css']
})
export class HikeDetailComponent implements OnInit {
  hikeId;
  hikeInfo;
  center: google.maps.LatLngLiteral;

  constructor(
    private route: ActivatedRoute,
    private location: Location,
    private router: Router,
    private firestore: AngularFirestore
  ) { }

  ngOnInit(): void {
    this.hikeId = this.route.snapshot.paramMap.get('id');
    this.hikeInfo = this.firestore.collection('hikes').doc(this.hikeId).valueChanges(); 
  }
}

База данных

firestore
   -- hikes
      -- key
         -- name: Hike A
         -- center: {
             lat: 28.12,
             lng: 32.71
            }

В настоящее время в нем отображается имя и карта Google с общим c Google HQ в качестве центра или [центр] привязка не работает.

1 Ответ

1 голос
/ 26 апреля 2020

Внутри ngOnInit() подпишитесь на наблюдаемое и получите значение:

this.hikeInfo = this.firestore.collection('hikes').doc(this.hikeId).valueChanges(); 
this.hikeInfo.subscribe(items => {
  console.log(items);
  this.center = items.center;
});

Тогда вы можете сделать в html:

<google-map
    [center]="center"
    width="100%">
</google-map>
...