es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminación del Método de Envoltura Extendido de Highcharts.wrap

¿Cómo puedo eliminar/deshacer manualmente un envoltorio en un prototipo de clase Highcharts?

Actualmente tengo esto en una clase en Angular y parece que el envoltorio está reteniendo mi método como un cierre incluso después de que se destruye el componente.

import * as Highcharts from 'highcharts';
export class ExampleComponent implements OnDestroy {
     constructor() {
         function logRefresh(H) {
             H.wrap(H.Tooltip.prototype, 'refresh', function(proceed, point) {
                 proceed.apply(this, Array.prototype.slice.call(arguments, 1));
                 console.log(proceed, point);
             });
         }
         logRefresh(Highcharts);
     }
     ngOnDestroy(): void {
        ...
     }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar/deshacer manualmente un envoltorio en un prototipo de clase de Highcharts, puede utilizar el método unwrapelement. En el componente ExampleComponent, puede modificar la función logRefresh para devolver el método envuelto y guardarlo como propiedad de clase. Luego, en el método ngOnDestroy, puede llamar al método unwrapelement en el método envuelto almacenado para deshacer el envoltorio. El código modificado se vería así:

    import * as Highcharts from 'highcharts';
    
    export class ExampleComponent implements OnDestroy {
      private wrappedTooltipRefresh: Function;
    
      constructor() {
        this.wrappedTooltipRefresh = Highcharts.wrap(
          Highcharts.Tooltip.prototype, 'refresh', function(proceed, point) {
            proceed.apply(this, Array.prototype.slice.call(arguments, 1));
            console.log(proceed, point);
          }
        );
      }
    
      ngOnDestroy(): void {
        Highcharts.wrap(
          Highcharts.Tooltip.prototype,
          'refresh',
          this.wrappedTooltipRefresh
        );
      }
    }
    

    En la función logRefresh modificada, se utiliza Highcharts.wrap para envolver el método refresh del Highcharts.Tooltip.prototype, y el método envuelto se almacena como la propiedad de clase wrappedTooltipRefresh. En el método ngOnDestroy, utilizamos Highcharts.wrap de nuevo, esta vez pasando el método wrappedTooltipRefresh almacenado y estableciéndolo de nuevo como el método refresh original del Highcharts.Tooltip.prototype, deshaciendo efectivamente el envoltorio.

Comments are closed.