Передача данных в html2canvas в angular2

Я пытаюсь использовать переменную "проблемы" внутри html2canvas(). Эта переменная является массивом объектов.

Я могу console.log это снаружи html2canvase(), но не внутри. Есть ли способ передать его внутрь?

Это в app.component.ts

    download(){
    console.log("outside -> download() " + this.problems.length);//works
    html2canvas(document.getElementById('graph')).then(function(canvas) {
    console.log("inside -> download() " + this.problems.length);//not working

    var img = canvas.toDataURL("image/png");
    var doc = new jsPDF();
    ...............

    // var dnow = Date.now();
    // var d = new Date(dnow);

    doc.setTextColor(0);
    doc.text(5,5,'date here');//will get date in here
    doc.addImage(img,'JPEG',120,20);
    doc.save('testCanvas.pdf');
    });
  }

1 ответ

Решение

Сфера действия this внутри html2canvas функция отличается, поэтому создайте ссылочную переменную для этого снаружи и используйте эту ссылочную переменную внутри функции html2canvas, измененный код выглядит следующим образом:

 download(){
    console.log("outside -> download() " + this.problems.length);//works
    var that = this; // assign this to variable that and use it inside html2Canvas function
    html2canvas(document.getElementById('graph')).then(function(canvas) {
    console.log("inside -> download() " + that.problems.length); // now that can be used here

    var img = canvas.toDataURL("image/png");
    var doc = new jsPDF();

    doc.setTextColor(0);
    doc.text(5,5,'date here');//will get date in here
    doc.addImage(img,'JPEG',120,20);
    doc.save('testCanvas.pdf');
    });
  }
Другие вопросы по тегам