【问题标题】:Ionic 2 - *ngFor over google maps disappearsIonic 2 - *ngFor over google maps 消失
【发布时间】:2018-06-16 11:08:43
【问题描述】:
<div *ngFor="let job of jobBoard">
        <div style="height: 200px">
          <!-- <div #map id="map"></div> -->
          <div #map id="jobBoard.jobBoardId"></div>
        </div>
</div>

我正在尝试弄清楚如何循环并继续添加地图。我有一张 jobBoard 卡,它显示与工作相关的信息 - 类别、收入等。我想弄清楚的是如何遍历 jobBoard 并继续向其中添加地图。

这里的另一个挑战是我每 30 秒为 jobBoard 获取数据,所以如果我继续调用

this.map = new google.maps.Map(this.mapElement[mapId].nativeElement, mapOptions);

新的 google.maps 然后地图闪烁。

这里是堆栈闪电战: https://stackblitz.com/edit/ionic-map-test

如果您在页面上停留大约 15 秒,地图就会消失。

更新 1:

通过使用trackby:

<div *ngFor="let job of jobBoard; trackBy: trackByFn">

地图出现在第一个项目上。但它仍然没有显示循环中的所有项目。

  public trackByFn(index, jobBoard): void {
    return jobBoard.jobBoardId;
  }

【问题讨论】:

    标签: angular google-maps ionic2 long-polling


    【解决方案1】:
      <div *ngIf="jobBoard">
        <div *ngFor="let job of jobBoard; trackBy trackByFn">
          <div style="height: 200px">
            <div style="height: 100%;width: 100%;display: block;" id="{{'map'+job.jobBoardId}}"></div>
          </div>
        </div>
      </div>
    

    然后在 .ts 方面:

    private loadMap(job: JobBoardInterface): void {
        console.log('loading map: ' + job.jobBoardId);
        var mapCanvas = document.getElementById('map' + job.jobBoardId);
        console.log("job.consumerGeo: ", job.consumerGeo);
        console.log("mapCanvas: ", mapCanvas);
        let lat: number = Number(job.consumerGeo.y);
        let lng: number = Number(job.consumerGeo.x);
        if (mapCanvas) {
          var Home_Map_Option = {
            center: { lat: lat, lng: lng }, // contractor's position
            zoom: 16,
            disableDefaultUI: true,
            mapTypeControl: false,
          }
          let map = new google.maps.Map(mapCanvas, Home_Map_Option);
          this.listOfAllMaps.push(map);
        }
      }
    

    进一步:我每隔几秒就会从服务器轮询一次:

      if (!this.isMapAlreadyLoaded) {
        this.isMapAlreadyLoaded = true;            
        this.loadONeTimeMap(this.jobBoard);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 2018-02-20
      • 2018-08-17
      • 2017-12-14
      • 2016-11-24
      • 2017-12-14
      • 2018-04-20
      • 2013-04-25
      相关资源
      最近更新 更多