PrimeNG p-datatable可调整列宽异常:调整时全表文本被选中
解决PrimeNG p-datatable调列宽时文本全选中的问题
嘿,你遇到的这个情况其实不是PrimeNG的Bug啦,是浏览器拖拽元素时的默认文本选中行为搞的鬼!给你几个实用的解决办法:
方法1:用CSS针对性禁用
如果想简单粗暴解决,可以直接给表格加个CSS规则,阻止文本选中:
.p-datatable { user-select: none; }
但要是还想让用户平时能选中文本复制的话,可以只在拖拽列头的时候禁用:
.p-datatable .p-resizable-column-handle:active ~ * { user-select: none; }
方法2:用组件事件动态控制
PrimeNG的p-datatable提供了onResizeStart和onResizeEnd事件,刚好可以用来在拖拽开始和结束时切换文本选中状态:
先在模板里绑定事件:
<p-datatable [resizableColumns]="true" (onResizeStart)="disableTextSelect()" (onResizeEnd)="enableTextSelect()"> <!-- 你的列配置 --> </p-datatable>
然后在组件类里写对应的方法:
disableTextSelect() { document.body.style.userSelect = 'none'; } enableTextSelect() { document.body.style.userSelect = 'auto'; }
这个办法很灵活,只有在调列宽的时候才禁用选中文本,平时不影响正常操作。
方法3:排查自定义代码冲突
要是上面的方法都不管用,可能是你项目里的其他自定义拖拽相关代码和PrimeNG的列宽调整逻辑冲突了。可以先临时移除那些自定义代码,看看问题会不会消失,慢慢排查出冲突的地方。
内容的提问来源于stack exchange,提问作者bigskull
相关产品推荐
相关产品推荐

