在angular2 Typescript应用程序中使用html2canvas获取错误

时间:2016-10-03 02:18:10

标签: javascript angular typescript html2canvas

我正在尝试在Angular2应用程序中实现打印功能。我遇到了这个包html2canvas。它看起来令人印象深刻,但当我试图在我的应用程序中包含它时,它给我一个错误。

以下是我遵循的步骤

  1. here
  2. 下载了js文件
  3. 已添加<script src="scripts/html2canvas.js"></script>
  4. 在TS文件declare var html2canvas: any;
  5. 中声明
  6. 添加代码以打印(当用户点击打印按钮 - 测试代码时)

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

  7. 但是一旦用户点击打印按钮,我就会收到以下错误

    browser_adapter.ts:78 ReferenceError: html2canvas is not defined

    任何帮助或提示都会有用......

1 个答案:

答案 0 :(得分:4)

TypeScript需要定义才能识别VanillaJS框架。

可以这样想,TypeScript依赖于它拥有的TS文件来识别对象,html2canvas包含在HTML中,但TypeScript现在可以识别 html2canvas 对象。

可能的解决方案:

<强>最佳

升级到TypeScript 2. *并使用新的&#39; typeRoots&#39;和&#39;类型&#39;字段。

升级到TS 2.0 +后执行以下步骤

npm i @types/html2canvas

并更新您的&#39; tsconfig.json&#39;像这样的文件:

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

<强>可接受

手动下载定义文件(不建议您通过手动获取最新版本来维护每个更新的定义)。

又快又脏

创建&#39; references.d.ts&#39;将文件放在根文件夹中( tsconfig.json 旁边)并写下以下内容:

declare var html2canvas: any;

通过这样做,转录者会知道你作为一名编码人员都知道“html2canvas”的存在,因此它不会将其视为一个错误(这是一个错误的主要缺点) #39;解决方案是你没有对图书馆的智能感知支持,所以基本上你只是盲目地编写代码。

因此,对于一个可靠的项目,我建议使用最佳解决方案,如果您只是想使用TS进行测试,那么任何其他解决方案都可以:)。

如果您想了解有关TS2中包含的新类型属性的更多信息,请阅读对其他问题的回复:

Typescript 2.0. "types" field in tsconfig.json

当然可以参考文档:

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