2016-06-28 6 views
4

Я хочу знать, что функция Angular 2 обеспечивает способ определения устройства клиента (экран большого экрана, среднего или малого размера) или может быть шириной экрана, на основе которой может отображаться или скрываться некоторое содержимое (удален из дома).Angular 2 Media Queries

ответ

4

HostListener

Один из способов заключается в использовании HostListener декоратора. Выбранный метод будет вызываться, когда элемент хоста выдает указанное событие.

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

Via ngZone

Другой способ импортировать ngZone в компонент. Затем вы можете использовать NgZone, чтобы проверить событие onresize.

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

После этого вы можете использовать атрибут [hidden], чтобы скрыть содержимое зависит от вашего значения ширина или высота.

+0

Большое вам спасибо за Максимилиана. Еще один вопрос: использует ли NgZone какие-либо накладные расходы или может вызвать любую проблему с производительностью? –

+0

@NaveedAhmed Мое понимание заключается в том, что NgZone # run может использоваться в обработчике для некоторого асинхронного процесса, который выполняется за пределами обнаружения угловых изменений. В этом случае мы хотим реагировать на события onresize, которые выходят извне Angular, поэтому, чтобы реагировать на это событие в циклах обнаружения изменений углов, мы можем зарегистрировать слушателя для этого события в окне и использовать 'run 'планировать обработку, выполняемую из угловой зоны. TLDR, в то время как у вас могут быть проблемы с производительностью, если вы планируете слишком много логики для выполнения в зоне, этот пример выглядит нормально для меня. – Manningham

4

Нет необходимости использовать NgZone. Есть более простые способы захвата события окна изменения размера.

@HostListener('window:resize', ['$event']) 
onResize(event) { 
    const target = event.target; 
    this.width = target.innerWidth; 
    this.height = target.innerHeight; 
} 

или если вы хотите использовать, если из HTML

<div (window:resize)="onResize($event)" 

onResize(event) { 
    event.target.innerWidth; 
}