vue-cli 项目中使用 v-chart 及导出 chart 图片

安装:

npm i v-charts echarts -S

组件中使用:

  1 <template>
  2     <div class="app-chart">
  3         <div id="print-content">
  4             <!--用于图标组件-->
  5             <ve-pie :data="chartData" :colors="colors"></ve-pie>
  6             <!--导出的图片box-->
  7             <div ref="box"></div>
  8         </div>
  9         <div class="foot">
 10             <!--打印操作-->
 11             <button type="primary" @click="doPrint">打 印</button>
 12         </div>
 13     </div>
 14 </template>
 15 
 16 <script>
 17     //引入图标组件
 18     import VePie from 'v-charts/lib/pie.common'
 19     
 20     export default {
 21         
 22         name: "app-pie",
 23         
 24         data(){
 25             
 26             return{
 27                 
 28                 //图标相关参数(详情见官方文档)
 29                 chartData:{
 30                             columns: ['日期', '销售量'],
 31                             
 32                             rows: [
 33                                 { '日期': '1月1日', '销售量': 123 },
 34                                 { '日期': '1月2日', '销售量': 207 },
 35                                 { '日期': '1月3日', '销售量': 167 },
 36                                 { '日期': '1月4日', '销售量': 193 },
 37                             ]
 38                             
 39                        },
 40                        
 41                 //图标样式的配置(相关配置查看官方文档)
 42                 colors:['#19d4ae','#fa6e86']
 43             }
 44             
 45         },
 46         
 47         //注册图标组件
 48         components:{
 49             VePie
 50         },
 51         
 52         methods:{
 53             
 54             //打印页面
 55             doPrint(){
 56                 
 57                 this.createImage();
 58                 
 59                 this.$nextTick(()=>{
 60                     
 61                     if(this.$refs.box.innerHTML){
 62                         
 63                         let PrintContent = document.getElementById('print-content');
 64                         let newContent =PrintContent.innerHTML;
 65                         let oldContent = document.body.innerHTML;
 66                         document.body.innerHTML = newContent;
 67                         window.print();
 68                         window.location.reload();
 69                         document.body.innerHTML = oldContent;
 70                         return false;
 71                         
 72                     }
 73                     
 74                 });
 75                 
 76             },
 77             
 78             //chart图标导出图片
 79             createImage(){
 80                 
 81 //              this.$nextTick(()=>{});
 82                 
 83                 const canvas = document.getElementsByTagName('canvas')[0];
 84                     
 85                 const box = this.$refs.box;
 86                 
 87                 let image = canvas.toDataURL({
 88                         type:"png",
 89                         pixelRatio: 2,
 90                         backgroundColor: '#fff',//不设置此项,导出图片的底色是黑色
 91                     });
 92                     
 93                 box.innerHTML = '<img src="'+image+'" alt="">';
 94             }
 95         },
 96     }
 97 </script>
 98 
 99 <style scoped>
100     @media print {
101         .no-print{
102             display: none;
103         }
104     }
105 </style>
 
原文地址:https://www.cnblogs.com/zhaoxiaoying/p/9723538.html