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());
}
}