此代码适用的场景是一个页面有多个数据图表。
首先需要拿到你生成数据图表的数据, 然后赋值给一个数组,数组需要在data定义,还需要去重。
// 检查是否有相同的parameter值
const hasDuplicate = this.toImageArr.some(
iiem => iiem.parameter === element.parameter
);
// 如果没有重复,则添加到数组
if (!hasDuplicate) {
this.toImageArr.push(element);
}
然后点击导出按钮的代码如下:
// 导出图表为图片
exportExcel() {
const uniqueImageNames = new Set(this.toImageArr);
for (const image of this.toImageArr) {
const imageName = image.parameter;
if (uniqueImageNames.has(imageName)) {
continue;
}
Plotly.toImage(`id${imageName}`, { format: 'png', width: 1600, height: 1000 })
.then(function (url) {
// 创建一个虚拟的下载链接
const link = document.createElement('a');
link.href = url;
link.download = `${imageName}.png`;
//imageName图片名称,根据自己需求修改
link.style.display = 'none';
// 将下载链接添加到页面中并触发点击事件
document.body.appendChild(link);
link.click();
// 清理下载链接
document.body.removeChild(link);
uniqueImageNames.add(imageName);
})
.catch(function (error) {
console.log('Error exporting chart:', error);
});
}
}
单个下载可以点击数据图表的照相机,可以实现单个下载。
如果数据图表做了分页和懒加载,无法获取第二页数据图表的dom, 使用以下代码:
exportExcel() {
const uniqueImageNames = new Set();
const promises = this.toImageArr.map((image) => {
const imageName = image.parameter;
if (uniqueImageNames.has(imageName)) {
return Promise.resolve();
}
return Plotly.toImage(`id${imageName}`, { format: 'png', width: 1600, height: 1000 })
.then(function (url) {
const link = document.createElement('a');
link.href = url;
link.download = `${imageName}.png`;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
uniqueImageNames.add(imageName);
})
.catch(function (error) {
console.log('Error exporting chart:', error);
});
});
Promise.all(promises)
.then(() => {
console.log('All charts exported successfully');
})
.catch((error) => {
console.log('Error exporting charts:', error);
});
}
好用的话点赞支持一下,谢谢