Подтвердить что ты не робот

Angular2 получить ширину окна onResize

Попытка выяснить, как получить ширину окна при изменении размера событий в Angular2. Вот мой код:

export class SideNav {

    innerWidth: number;

    constructor(private window: Window){

        let getWindow = function(){
          return window.innerWidth;
        };

        window.onresize = function() {
          this.innerWidth = getWindow();
          console.log(getWindow());
        };
} 

Я импортирую поставщика окна по всему миру в файле bootstrap.ts, чтобы обеспечить доступ к моему окну. Проблема, с которой я столкнулась, - это размер окна, но при изменении размера окна - он повторяется один и тот же размер снова и снова, даже если окно меняет размер. См. Изображение для примера console.log: Снимок экрана

Моя общая цель - установить номер окна для переменной onresize, чтобы я мог получить к ней доступ в шаблоне. Любые идеи о том, что я делаю неправильно здесь?

Спасибо!

4b9b3361

Ответ 1

<div (window:resize)="onResize($event)"
onResize(event) {
  event.target.innerWidth; 
}

чтобы получать уведомления о событиях прокрутки дочернего элемента в шаблоне компонентов

или прослушать сам элемент хоста компонентов

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

Ответ 2

Используйте NgZone для запуска обнаружения изменений:

constructor(ngZone:NgZone) {
    window.onresize = (e) =>
    {
        ngZone.run(() => {
            this.width = window.innerWidth;
            this.height = window.innerHeight;
        });
    };
}

Ответ 3

В этом случае вам нужно вручную запустить обнаружение изменений. Когда вы изменяете переменную компонента из внешнего контекста Angular, в основном событие изменения размера не получает обезьяну, исправленную системой обнаружения изменений Angular2.

код

import {ChangeDetectorRef} from 'angular2/core'

export class SideNav {
    innerWidth: number;

    constructor(private window: Window, private cdr: ChangeDetectorRef){

       let getWindow = () => {
          return window.innerWidth;
       };

      window.onresize = () => {
          this.innerWidth = getWindow();
          this.cdr.detectChanges(); //running change detection manually
      };
    }
}

Скорее я хотел бы предложить вам перейти на этот ответ, который выглядит более чистым