constructor() {

    document.addEventListener('someEvent', function(event) {
      console.log(event.data);
      this.test(); //throws error - this.test() is undefined
    });
  }

Si lo muevo a ngOnInit, funciona bien:

  ngOnInit() {
    this.test(); //works ok
  }

La función es solo un método en el componente, definido después del constructor:

  public test(){
    console.log('TEST');
  }

Mi objetivo final es ejecutar el método test() de mi componente cada vez que se active el evento someEvent en la ventana global (el evento proviene de JavaScript sin procesar, es decir, document.dispatchEvent(event, {'detail': evntPayload});

¿Cómo logro esto?

1
VSO 22 mar. 2017 a las 23:53

2 respuestas

La mejor respuesta

Use las funciones de flecha para mantener this apuntando a la instancia de clase actual

  constructor() {

    document.addEventListener('someEvent', (event) => { // <<< changed
      console.log(event.data);
      this.test(); //throws error - this.test() is undefined
    });
  }
2
Günter Zöchbauer 22 mar. 2017 a las 20:59

El siguiente enlace debería resolver lo que necesita. Solo únete a un evento diferente.

Evento de cambio de tamaño de ventana angular

1
Community 23 may. 2017 a las 10:31