Здесь карта javascript API для Angular приложения, утечка памяти происходит для открыть страницу карты здесь - PullRequest
1 голос
/ 06 января 2020

при каждом открытии здесь страницы карты:

this.router.navigate(['/car-section/here-map'],  {replaceUrl: false});

html здесь код страницы карты:

<div #map class="map-container">

Здесь компонент карты:

export class HereMapComponent implements OnInit {

  private platform: any;
  private mapHere:any;

........

@ViewChild("map", {static: true}) public mapElement: ElementRef;

  constructor() {
    this.platform = new H.service.Platform({
      'apikey': API_Key
    });

   }

......


 public ngAfterViewInit() {

    setTimeout(() => {

      let defaultLayers = this.platform.createDefaultLayers();
      this.mapHere = new H.Map(
          this.mapElement.nativeElement,
          defaultLayers.vector.normal.map, //3.1
          // defaultLayers.normal.map,  //3.0
          {
              zoom: 16,
              center: this.center,
              pixelRatio: window.devicePixelRatio || 1
          }
      );
    }, 300);
  }

получить утечку памяти, каждый раз получайте две утечки памяти:

введите описание изображения здесь

1 Ответ

1 голос
/ 07 января 2020

Это неудивительно, учитывая тот факт, что жизненный цикл компонента Angular разрушается при переходе от вида и (пере) создается при переходе к виду, в то время как объекты карты ЗДЕСЬ находятся в глобальном H object.

Я думаю, что ваш Angular компонент должен взаимодействовать с OnDestroy и поэтому реализует метод ngOnDestroy . В этом методе нужно распоряжаться объектами и обработчиками, которые были "наложены" на карту. Как правило, нам нужно располагать обработчики событий, затем отображать объекты, а затем саму карту. См., Например, метод dispose для Справочник по H.Map API .

...