Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度8设置ngSstyle和读数offsetwidth给出旧值_Angular_Typescript_Ng Style_Angular Renderer2 - Fatal编程技术网

Angular 角度8设置ngSstyle和读数offsetwidth给出旧值

Angular 角度8设置ngSstyle和读数offsetwidth给出旧值,angular,typescript,ng-style,angular-renderer2,Angular,Typescript,Ng Style,Angular Renderer2,我很难为一个小型自定义上下文菜单获取正确的值。通过ngStyle设置样式时。当像下面这样操作时,组件将正确呈现,但控制台.log将显示元素实际位置的错误值(-9999px) 我不想用setTimeout之类的东西来攻击它。有没有更好的方法来做到这一点,或者是否有可能听取样式更改 component.html 组件技术 XXX类{ onContextmenu($event:MouseEvent){ $event.preventDefault(); const top=`${$event.y}p

我很难为一个小型自定义上下文菜单获取正确的值。通过
ngStyle
设置样式时。当像下面这样操作时,组件将正确呈现,但
控制台.log
将显示元素实际位置的错误值(
-9999px

我不想用setTimeout之类的东西来攻击它。有没有更好的方法来做到这一点,或者是否有可能听取样式更改

component.html


组件技术

XXX类{
onContextmenu($event:MouseEvent){
$event.preventDefault();
const top=`${$event.y}px`;
常量left=`${$event.x}px`;
this.contextMenuStyles={top,left};
log(this.contextMenu.nativeElement.getBoundingClientRect());
}
}

我不知道为什么会发生这种情况,但通过Render2设置样式时可以修复

因此,与[ngStyle]和this.contextMenuStyles=。。。我只是使用:

this.renderer.setStyle(this.contextMenu.nativeElement,'top',top);
this.renderer.setStyle(this.contextMenu.nativeElement,'left',left);
这可以通过使用多个样式的辅助函数以更优雅的方式完成。例如:

XXX类{
构造函数(私有呈现器:Renderer2){}
onContextmenu($event:MouseEvent){
$event.preventDefault();
const setStyles=(domEl:DomElement,styles:StyleObj)=>{
Object.keys(styles).forEach((styleName)=>{
this.renderer.setStyle(domEl、styleName、styles[styleName]);
});
};
设置样式(this.contextMenu.nativeElement{
顶部:`${$event.y}px`,
左:`${$event.x}px`,
});
log(this.contextMenu.nativeElement.getBoundingClientRect());
}
}