ここにそれを行うためのより良い方法があります。Birowskyの回答に基づく。
ステップ1:angular service
RxJS Observablesでを作成します。
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs';
@Injectable()
export class WindowService {
height$: Observable<number>;
//create more Observables as and when needed for various properties
hello: string = "Hello";
constructor() {
let windowSize$ = new BehaviorSubject(getWindowSize());
this.height$ = (windowSize$.pluck('height') as Observable<number>).distinctUntilChanged();
Observable.fromEvent(window, 'resize')
.map(getWindowSize)
.subscribe(windowSize$);
}
}
function getWindowSize() {
return {
height: window.innerHeight
//you can sense other parameters here
};
};
ステップ2:上記service
を挿入しObservables
、サービス内で作成されたウィンドウのサイズ変更イベントを受け取りたい場所にサブスクライブします。
import { Component } from '@angular/core';
//import service
import { WindowService } from '../Services/window.service';
@Component({
selector: 'pm-app',
templateUrl: './componentTemplates/app.component.html',
providers: [WindowService]
})
export class AppComponent {
constructor(private windowService: WindowService) {
//subscribe to the window resize event
windowService.height$.subscribe((value:any) => {
//Do whatever you want with the value.
//You can also subscribe to other observables of the service
});
}
}
リアクティブプログラミングを正しく理解することは、常に困難な問題を克服するのに役立ちます。これが誰かを助けることを願っています。
innerHeight
し、innerWidth
プロパティ...