Spe*_*gum 30 css typescript angular2-directives angular
试图找出如何在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());
};
}
Run Code Online (Sandbox Code Playgroud)
我在bootstrap.ts文件中全局导入窗口提供程序,使用提供从我的应用程序访问窗口.我遇到的问题是这确实给了我一个窗口大小,但是在调整窗口大小时 - 即使窗口改变大小,它也会反复重复相同的大小.请参阅console.log示例图片: 截图图片
我的总体目标是能够将窗口编号设置为变量onresize,以便我可以在模板中访问它.我在这里做错了什么想法?
谢谢!
Gün*_*uer 53
<div (window:resize)="onResize($event)"
Run Code Online (Sandbox Code Playgroud)
onResize(event) {
event.target.innerWidth;
}
Run Code Online (Sandbox Code Playgroud)
获取有关组件模板中子元素的滚动事件的通知
或者监听组件主机元素本身
@HostListener('window:resize', ['$event'])
onResize(event) {
event.target.innerWidth;
}
Run Code Online (Sandbox Code Playgroud)
pix*_*its 21
使用NgZone触发变化检测:
constructor(ngZone:NgZone) {
window.onresize = (e) =>
{
ngZone.run(() => {
this.width = window.innerWidth;
this.height = window.innerHeight;
});
};
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您需要手动运行更改检测.当您从Angular的外部上下文修改组件变量时,基本上resize事件不会被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
};
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我想建议你去寻找更清洁的答案