我有一个问题,我正在考虑如何解决 . 我有三个引导选项卡,每个选项卡上都有一个图表通过Chart.js呈现 .

我希望用户可以通过按钮点击加载页面后导出所有图表 .

一个选项卡一切正常 . 像这样:

var canvasEquity = document.getElementById("myChart") as HTMLCanvasElement;
var imgEquity    = canvasEquity.toDataURL("image/png");
var iframe = "<iframe 
               width='100%' height='100%' 
               src='" + imgEquity + "'>
               </iframe>"

pdfMake.vfs = pdfFonts.pdfMake.vfs;

var pdfDocument = {
content: [ 
  {
    image: imgEquity,
    width: 350,
    height: 200
  }
]};

pdfMake.createPdf(pdfDocument).open();

我得到一个很好的PDF文件,其中一个图表目前是打开的 . 该图表呈现为OnInit,如下所示:

renderChart() {

if (this.myChart) 
  this.myChart.destroy();

var ctx = document.getElementById("myChart");

this.myChart = new Chart(ctx, {
  type: 'line',
  data: {
    labels :this.equityDates,
    datasets: [{
      label: 'Closed Equity',
      data: this.equity,
    }]
    }

打开其选项卡时,其他图表显然会被渲染(onClick) . 我尝试将它们手动渲染到DOM中,通过调用它们的方法就像上面那样,并通过调用Chart.js APi渲染menthod加载,但是我得到一个错误 . 他们根本不在那里,数据网址是空的!

但是,如果您至少打开一次选项卡并返回上一个选项卡,则会显示数据URL . 有没有人知道如何以编程方式解决这个问题,因此您只需单击一个按钮即可呈现所有图表,而无需将它们全部放在一个页面上 . 谢谢 .

这里也是选项卡代码的bootstrap部分的示例 .

<div>
 <ul class="nav nav-tabs">

<li class="active">
<a data-toggle="tab" href="#equity">Equity</a>
</li>

<li (click)="renderChartDD()">
<a data-toggle="tab" href="#dd">Drawdowns</a>
</li>

 <li (click)="renderMonthlyRevChart()" >
 <a data-toggle="tab" href="#monthlyEquity">Monthly Revenue</a>
 </li>

</div>



              <div class="tab-content">

                <div id="equity" class="tab-pane active">                      
                      <canvas id="myChart"></canvas>                    
                </div>

                <div id="dd" class="tab-pane">
                    <canvas id="myChartDD"></canvas>
                </div>

                <div id="monthlyEquity" class="tab-pane">
                    <canvas id="myChartMonthlyEquity"></canvas>
                </div>

               </div>