route page navigationend change events angular

events - page - title angular



¿Cómo puedo detectar el tamaño de la ventana al instante en angular 2? (3)

algunas de las funciones de mi componente se activan o desactivan según el tamaño del navegador, por lo tanto, quiero verificar el ancho del navegador en el evento de cambio de tamaño, sin embargo, puedo hacerlo utilizando el método On Init, pero necesito actualizar el navegador cuando se cambie el tamaño para actualizar el ancho del navegador

ngOnInit() { if (window.innerWidth <= 767){ ---- do something } }

Sin embargo, traté de usar el método OnChanges pero tampoco funciona

OnChanges(changes:SimpleChanges){ console.log( ''width:====>'' + changes[window.innerWidth].currentValue); if ( changes[window.innerWidth].currentValue <= 767 ){ ---- do something }

}

¿Hay alguna sugerencia o forma alternativa de lograr esto?


Puede colocar el controlador en el evento de cambio de resize sobre el objeto de la window , pero esto le permitirá colocar solo un evento de cambio de resize único, el último evento registrado en onresize funcionará.

constructor(private ngZone:NgZone) { window.onresize = (e) => { //ngZone.run will help to run change detection this.ngZone.run(() => { console.log("Width: " + window.innerWidth); console.log("Height: " + window.innerHeight); }); }; }

Para hacerlo más anguloso, use @HostListener(''window:resize'') dentro de su componente, que le permitirá llamar a su función de redimensionamiento (en la cual se ha montado el decorador HostListner ) para resize el resize de la ventana.

@HostListener(''window:resize'', [''$event'']) onResize(event){ console.log("Width: " + event.target.innerWidth); }


Una forma más sencilla sería utilizar el método de cambio de tamaño en el bloque html que desea detectar:

<div class="some-class" (window:resize)="onResize($event)">...</div>

Luego, en su archivo .ts puede simplemente agregar:

onResize(event) { const innerWidth = event.target.innerWidth; console.log(innerWidth); if (innerWidth <= 767) { ...do something } }

Agregue esto fuera de ngOnInit() {} menos que desee el tamaño de la ventana en la carga de la página.

Cuando redimensionas tu ventana, verás la console.log


Utilice HostListener. Probablemente debería rebotar el evento de cambio de tamaño, sin embargo, antes de hacer nada, se activará cada vez que el tamaño cambie, lo que podría ser docenas o cientos de veces en unos pocos milisegundos a medida que el usuario arrastra el tamaño de la ventana.

import { Component, HostListener } from ''@angular/core''; @Component({...}) class TestComponent { @HostListener(''window:resize'') onWindowResize() { //debounce resize, wait for resize to finish before doing stuff if (this.resizeTimeout) { clearTimeout(this.resizeTimeout); } this.resizeTimeout = setTimeout((() => { console.log(''Resize complete''); }).bind(this), 500); } }