2016-10-03 5 views
1

Я пытаюсь реализовать функцию печати в своем приложении Angular2. Я наткнулся на этот пакет html2canvas. Это выглядит впечатляюще, но когда я пытаюсь включить это в мое приложение, он бросает мне ошибку.с использованием html2canvas в angular2 Ошибка при получении скриптового приложения

Вот мои шаги, которые я затем

  1. загружающее расслоения плотного файл из here
  2. Добавлены <script src="scripts/html2canvas.js"></script>
  3. объявленных в файле TS declare var html2canvas: any;
  4. добавлен кодом для печати (когда пользователь нажимает печати кнопка - контрольный код)

    printview(): void { html2canvas(document.body).then(function(canvas) { document.body.appendChild(canvas); }); }

, но как только пользователь нажимает кнопку нажмите для печати я получаю следующее сообщение об ошибке

browser_adapter.ts:78 ReferenceError: html2canvas is not defined

Любая помощь или подсказка будет полезно ...

+0

Вы подтвердили, что загружен html2canvas.js? – sideroxylon

+0

Да, я проверил ... он был загружен отлично ... – microchip78

ответ

4

машинопись нуждается определения для того, чтобы определить каркасы VanillaJS.

Подумайте об этом так, машинописи опирается на файлах TS это имущие для того, чтобы indentify объектов, html2canvas включен в HTML, но машинопись теперь имеет способ идентификации html2canvas объекта.

Возможные решения:


Лучшего:

Обновления до машинописи 2. * и использовать новый 'typeRoots' и тип полей.

Выполните следующие действия после обновления до TS 2.0+

npm i @types/html2canvas

и обновить файл '' tsconfig.json так:

{ "compilerOptions": { // your options, "typeRoots": [ "./node_modules/@types" ], "types": [ "html2canvas" ] } }


Приемлемый:

Загрузите файл определения вручную (не рекомендуется, так как вам нужно поддерживать каждое обновленное определение, вручную извлекая последнюю версию).


Быстрый и грязный:

Создать «references.d.TS' файл в корневой папке (рядом с tsconfig.json) и написать следующее:

declare var html2canvas: any;

Делая это, transpiler будет знать, что вы, как кодер известны о „html2canvas“ «существование s, поэтому он не будет рассматривать это как ошибку (быть основным недостатком этого„решения“является то, что у вас нет поддержки IntelliSense для библиотеки, поэтому в основном вы просто пишете код в слепую.


Так что для солидного проекта я рекомендую Best, если вы просто хотите поиграть с TS для тестирования, любые другие решения в порядке :).

Если вы хотите узнать больше о новых свойствах типа, включенных в TS2, прочитайте ответ на этот другой вопрос:

Typescript 2.0. "types" field in tsconfig.json

и, конечно, обратиться к документации:

https://www.typescriptlang.org/docs/handbook/compiler-options.html

+0

С «typeRoots», указанным в файле 'tsconfig, json', не является ошибкой, чтобы дополнительно указать элемент' types'? То есть не должно быть достаточно просто указать 'typeRoots'? – Cuga

+0

Спасибо за отличный ответ. Я никогда не попадаю в .then (...). Я получаю следующую ошибку: __WEBPACK_IMPORTED_MODULE_7_html2canvas__ не является функцией Любые мысли будут оценены! – Toolsmythe

Смежные вопросы