我正在用Chart.js在我的html页面中创建多个图表,在窗口加载后,图表每秒都会动态更新为新的数据值。我使用Chart.js update()函数处理更新。所有创建的图表都存储在全局数组中,然后获取这些图表以进行更新。
当我第一次打开html页面,图表每秒更新一次(显示实时测量数据)时,更新工作正常,但当我移动到webapp中的另一个子页面,然后返回到应该显示图表的页面时,所有画布都是空的(图表中的数据正在更新,但画布仍然是空白的)。
当我移动到子页面时,我只更新了部分html内容,包括那些画布所在的区域,当我返回到frontpage时,我加载了与第一次打开网页时相同的html内容。
因此,目前我所做的是,当我返回到应该呈现图表的页面时,我从全局图表数组(在第一次打开网页时创建)中获取旧图表,用新数据集替换旧数据集,然后调用Chart.js更新()函数。我知道数据集每秒更新一次,就像我第一次打开网页时所做的那样(我用控制台检查这一点),但是画布是空的,所以这些更新的图表不再显示在任何地方。
这是我的画布,当更新正常工作时:
<canvas id="etaisyyskuvaaja" height="200" width="350" class="chartjs-render-monitor" style="display: block; touch-action: none; user-select: none; -webkit-user-drag: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></canvas>这是从子页面返回后尝试更新时的外观:
<canvas id="etaisyyskuvaaja"></canvas>所以这就是我所说的“清空”。
我认为当我更新在特定画布中创建的旧图表时,当数据更新时,它应该自动呈现到相同的画布上(实际上,当我第一次打开网页时,html内容保持不变时,这确实是这样的)。然而,现在看来,当我更改了html内容(移动到子页面),然后再次加载那些画布(返回到frontpage并再次开始循环更新)时,重新渲染似乎不再起作用。
有人能告诉我为什么我的图表应该用新数据更新,但画布却是空的吗?
发布于 2018-07-24 19:04:22
首先,我想也许我需要再次获取canvas元素,并以某种方式将它们传递给update-function,如果图表实例在移除html内容后不知何故遗漏了原始canvas,然后将其加载回来之类的。
然而,我找不到更新画布的解决方案,所以我设法解决了这个问题:
当返回到首页时,我首先循环遍历图表数组,并删除所有应该在我的首页中的图表(最后一次在加载首页时创建)。然后,我在加载html内容后再次创建这些图表,并将它们保存在我的图表数组中。现在,当我开始对这些新创建的图表进行循环更新时,更新就像魔咒一样再次生效!
https://stackoverflow.com/questions/51495964
复制相似问题