angular - PrimeNG饼图随机显示,分辨率变化显示
问题描述
我正在使用带有来自后端的动态数据的primeng饼图。当我使用静态数据时,饼图按预期工作,但现在与动态数据集成后,它会在页面刷新时随机显示。它根据屏幕分辨率(即宽度和高度)的变化进行渲染和显示。尝试了多种方法,例如 ViewChild、响应性和设置图表的高度和宽度,但似乎都没有奏效。
解决方案
我记得遇到过类似的问题。它与变化检测有关。屏幕分辨率变化触发变化检测。如果您在任何地方都有针对此事件的处理程序,那么还有一些事件,例如鼠标移动。
考虑到我没有看到代码,我想可能有两种解决方案:
- 可以在不使用数据更改对变量的引用的情况下完成数据绑定。例如使用 push 方法更新数据源。
// this is not recognized by the change detection mechanism as update because the reference to this.data is not updated
this.resourceService.getResources().subscribe( data => {
var counts1 = {};
this.chartHistory.forEach((x) => {
counts1[x] = (counts1[x] || 0)+1;
});
for (let i = 0; i < Object.keys(counts1).length; i++) {
this.chartHistoryData.push(Object.keys(counts1)[i]);
this.chartHistoryVal.push(Object.values(counts1)[i]);
}
});
// this would be recognized
this.resourceService.getResources().subscribe( data => {
var counts1 = {};
this.chartHistory.forEach((x) => {
counts1[x] = (counts1[x] || 0)+1;
});
Object.entries(counts1).forEach(([key, value]) => {
this.chartHistoryData = [...this.chartHistoryData, key];
this.chartHistoryVal = [...this.chartHistoryVal, value];
});
});
- 作为一种解决方法,在数据更新后触发更改检测也可以。ChangeDetectorRef.detectChanges()做到了
推荐阅读
- reactjs - useState 未使用过滤数组设置初始状态
- python - 我可以一次只打印其中一个问题吗?
- c# - 使用 MemoryStream 和 CryptoStream 时清除 Gen2 和 LOH 中的堆
- java - Car 对象和 Dog 对象是否用于现实生活中的程序?
- xamarin - 通过 TabBar Xaml 将视图模型中的参数传递给页面的 ctor?
- flask - 如何正确更新具有新值的外键?
- javascript - 在前端从 nodejs 管理 jwt
- javascript - js如何计算上传速度
- java - 实现验证方法以仅允许在 Java 中输入字符串
- django - 我无法访问新保存的模型实例的 ID 以用于处理同一页面中的另一个表单