Angular-google-maps: La ventana de información tiene una fuga

Creado en 18 dic. 2016  ·  4Comentarios  ·  Fuente: SebastianM/angular-google-maps

Descripcion del problema

Si está utilizando un marcador con una ventana de información visible, el uso de la CPU aumentará hasta el 100% del núcleo. Probado con Chrome.

Pasos para reproducir y una demostración mínima del problema.

http://plnkr.co/edit/q0ttx1XbTCnB4DFujtRV?p=preview

Pasos para reproducir:

  1. Abra el administrador de tareas de Chrome (Menú - Más herramientas - Administrador de tareas)
  2. Verifique que el uso de CPU por parte de plunkr sea bajo y no crezca
  3. Haga clic en el botón "alternar información" (la ventana de información debe mostrarse después del clic)
  4. Supervise el uso de la CPU durante 1 minuto (lo verá crecer con el tiempo)
  5. (Opcional) Haga clic en el botón "alternar información" nuevamente (el uso de la CPU permanece alto incluso después de que se cierra la ventana de información)

Comportamiento actual

El marcador con una ventana de información abierta usa cada vez más CPU con el tiempo

Comportamiento esperado / deseado

Uso constante de la CPU

versión angular2 y angular2-google-maps

2.1.1 y 0.16.0

Otra información

urgent AgmInfoWindow stale bug

Comentario más útil

Encontré una solución aquí: https://github.com/angular/angular/issues/10883#issuecomment -240423378
Entonces, lo que hice fue llamar a infoWindow.open () / close () fuera de Angular para evitar detecciones de cambios:

map.component.html

<div *ngFor="let property of _properties">
  <agm-marker [latitude]="property.Lat"
              [longitude]="property.Lng"
              [iconUrl]="_markerIconUrl"
              (mouseOver)="_infoWindowOpen($event, infoWindow);"
              (mouseOut)="_infoWindowClose($event, infoWindow);">
  </agm-marker>
</div>
...
<agm-info-window #infoWindow>
</agm-info-window>

map.component.ts

import { Component, OnInit, NgZone } from '@angular/core';
...
constructor(private _zone: NgZone) {...}
...
  private _infoWindowOpen(mouseEvent: any, infoWindow: any) {
    infoWindow.hostMarker = mouseEvent.marker;
    this._zone.runOutsideAngular(() => {
      infoWindow.open();
    });
  }
...
  private _infoWindowClose(mouseEvent: any, infoWindow: any) {
    this._zone.runOutsideAngular(() => {
      infoWindow.close();
    });
  }

Todos 4 comentarios

si. Encontré el mismo problema.
Y yo también uso angular2.
La razón es que cuando se abre la ventana de información, la página detecta cambios una y otra vez, como un bucle. Entonces, la página se volvería a dibujar una y otra vez. Apresúrate. es un gran problema.

¿Alguna actualización / progreso sobre este tema? @SebastianM

Encontré una solución aquí: https://github.com/angular/angular/issues/10883#issuecomment -240423378
Entonces, lo que hice fue llamar a infoWindow.open () / close () fuera de Angular para evitar detecciones de cambios:

map.component.html

<div *ngFor="let property of _properties">
  <agm-marker [latitude]="property.Lat"
              [longitude]="property.Lng"
              [iconUrl]="_markerIconUrl"
              (mouseOver)="_infoWindowOpen($event, infoWindow);"
              (mouseOut)="_infoWindowClose($event, infoWindow);">
  </agm-marker>
</div>
...
<agm-info-window #infoWindow>
</agm-info-window>

map.component.ts

import { Component, OnInit, NgZone } from '@angular/core';
...
constructor(private _zone: NgZone) {...}
...
  private _infoWindowOpen(mouseEvent: any, infoWindow: any) {
    infoWindow.hostMarker = mouseEvent.marker;
    this._zone.runOutsideAngular(() => {
      infoWindow.open();
    });
  }
...
  private _infoWindowClose(mouseEvent: any, infoWindow: any) {
    this._zone.runOutsideAngular(() => {
      infoWindow.close();
    });
  }

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

¿Fue útil esta página
0 / 5 - 0 calificaciones