2017-08-31 14 views
0

私はPrimeNgチャートモジュール内のチャートを表示するためのモジュール(p-chart)を使用しています。要件は、ダウンロードアイコンをクリックして(グラフ/グラフの)画像を保存できることです。私はngForを使用してJSONオブジェクトを反復処理し、チャートを内部カードに正常に表示しました。ここでPrimeNgチャートの画像を保存またはダウンロードするには - 角度4

はHTMLです:

... 
<div class="card-media-block" id="Chart-{{rCard.id}}"> 
    <p-chart [type]="rCard.typeofReport" [data]="rCard.content"></p-chart> 
</div> 
... 

私もP-チャートは、ランタイムでキャンバスに変換されるため、専用のIDを持っていないことがわかりました。だから私は、.childNodesプロパティが、これからイメージをダウンロード/保存し、残念ながらできませんを使用して、そのcanvas要素に到達するためのDIV要素のID最も近い使用しました。

<div _ngcontent-c3="" class="card-media-description" id="Chart-ReportCard1"> 
    <p-chart _ngcontent-c3="" class="ng-tns-c3-2" ng-reflect-type="bar" ng-reflect-data="[object Object]"> 
     <div> 
      <iframe class="chartjs-hidden-iframe" tabindex="-1" style="display: block; overflow: hidden; border: 0px; margin: 0px; top: 0px; left: 0px; bottom: 0px; right: 0px; height: 100%; width: 100%; position: absolute; pointer-events: none; z-index: -1;"></iframe> 
      <canvas width="300" height="150" style="display: block;"></canvas> 
     </div> 
    </p-chart> 
</div> 

ここで私は、画像を保存するための書き込みしようとしたtypescriptです関数である:

saveImage(pCard): void { 
    let chartDiv = document.getElementById('Chart-' + pCard['id']); 
    let canvasElement = chartDiv.childNodes[1].childNodes[1].childNodes[2]; 

    console.log(canvasElement); // Output:- <canvas width="300" height="150" style="display: block;"></canvas> 
    let imageURL = canvasElement.toDataURL(); // Error:- Property 'toDataURL' does not exist on type 'Node'. 
    window.location.href = imageURL; 
} 

I」はここ

は(要素を検査することによって見出される)上のブロックから生成されたランタイム・HTMLでありますこの問題に固執して、親切に助けてください。要素を反復処理するQueryListとElementRefと@ViewChildrenデコレータを使っへ

+0

は誰かの操作を行います。あなたのコンポーネントの内部

<div *ngFor="let cdl of chartDataList"> <p-chart #barChart type="bar" [data]="cdl"></p-chart> </div> 

:テンプレート内の これに対する解決策はありますか? –

答えて

0

ルック

例:

@ViewChildren("barChart") charts: QueryList<ElementRef>; 

saveImage(event) { 
    this.charts.forEach(element => { 
     console.log(element); 
    }); 
} 
+0

こんにちは@BillF、私は上記の解決策を試した。 console.logでは、=> UIChart {el:ElementRef、onD​​ataSelect:EventEmitter、type: "bar"、_data:{...}、chart:Chart、...}を見ることができます。では、イメージを.png/.jpeg形式でローカルドライブに保存する方法を教えてください。 –

+0

さて、chart.jsに基づいているので、 '.toBase64Image()'関数を呼び出して画像のbase64でエンコードされた文字列を生成すると想像してください。 – BillF

+0

'.toBase64Image()'はElementRefの認識可能なプロパティではありません。コンパイルエラーが表示されます。 –

関連する問題