首页 > 解决方案 > Firestore 列表仅显示新更新的项目(Angular + Ionic)

问题描述

我有 angular+ionic+firestore 的问题。请参阅下面我的代码。我在filteredMarkers() 中做initialiseItems()。但是,每当我更新列表中的项目并返回检查列表时,只会显示更新的项目而不是整个列表。我在这里看到什么问题?非常感谢您的帮助❤️

这是我的角度代码:

async ionViewWillEnter() {
  console.log("ionViwWillEnter");
  await this.getCurrentLocation();
  this.offerList = await this.filterMarkers();
}

async initialiseItems(): Promise < any > {
  const initialOfferList = this.firestore
    .collection("offers")
    .valueChanges()
    .pipe(first())
    .toPromise();

  return initialOfferList;
}

async filterMarkers() {
  await this.getCurrentLocation();
  this.markers = await this.initialiseItems();
  this.mapsAPILoader.load().then(() => {
    console.log(
      "searchLocation is: " + this.geoLocationService.getLatitude(),
      this.geoLocationService.getLongitude()
    );
    const center = new google.maps.LatLng(
      this.geoLocationService.getLatitude(),
      this.geoLocationService.getLongitude()
    );
    //markers located within 50 km distance from center are included
    this.filteredMarkers = this.markers.filter((m) => {
      const markerLoc = new google.maps.LatLng(
        m.location.latitude,
        m.location.longitude
      );
      const distanceInKm =
        google.maps.geometry.spherical.computeDistanceBetween(
          markerLoc,
          center
        ) / 1000;
      if (distanceInKm < 50.0) {
        return m.location;
      }
    });
  });
  return this.filteredMarkers;
}

<ion-list *ngFor="let offer of filteredMarkers" (click)="goTo(offer)" class="ion-no-padding">
  <ion-item lines="none" class="offer ion-no-padding">
    <div class="item-content">
      <ion-card>
        <img [src]="offer.headImg" class="center-cropped" />
        <ion-card-content>
          <!-- <ion-img [src]="offer.offerProfileImg"></ion-img> -->
          <ion-row>
            <ion-col size="4" class="ion-text-left">
              <div class="userImg">
                <ion-item lines="none" class="ion-item-userPI">
                  <ion-avatar slot="start">
                    <img [src]="offer.userPI" />
                  </ion-avatar>
                </ion-item>
              </div>
            </ion-col>
            <ion-col size="8">
              <div class="offerDes">
                <ion-card-title>{{offer.title}}</ion-card-title>
                <ion-card-subtitle>{{offer.payRate}}</ion-card-subtitle>
              </div>
            </ion-col>
          </ion-row>
          <ion-row class="ion-align-items-center">
            <ion-col size="6">
              <div class="star">
                <ion-badge color="primary" mode="ios">
                  <ion-icon name="star"></ion-icon>
                  4.5
                </ion-badge>
              </div>
            </ion-col>
          </ion-row>
        </ion-card-content>
      </ion-card>
    </div>
  </ion-item>
</ion-list>

标签: angularlistfirebaseionic-frameworkgoogle-cloud-firestore

解决方案


在您使用的代码中,.pipe(first()),first()将仅返回更新文档的第一项,因此您只会在valueChanges执行时获取更新的文档。

您将不得不使用地图来遍历所有文档。


推荐阅读