在angular2 Typescript应用程序中使用html2canvas出现错误

mic*_*p78 1 javascript html2canvas typescript angular

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

这是我遵循的步骤

  1. 这里下载的js文件
  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

任何帮助或提示将是有用的...

小智 5

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

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

可能的解决方案:


最佳

升级到TypeScript 2. *,并使用新的“ typeRoots”和“ types”字段。

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

npm i @types/html2canvas

然后像这样更新您的“ tsconfig.json”文件:

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


可接受的

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


快速又肮脏

在您的根文件夹(tsconfig.json旁边)中创建一个'references.d.ts'文件,并编写以下内容:

declare var html2canvas: any;

这样,编译器将知道您作为编码器已经知道'html2canvas'的存在,因此不会将其视为错误(此“解决方案”的主要缺点是您不支持IntelliSense)库,因此基本上您只是盲目地编写代码。


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

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

打字稿2.0。tsconfig.json中的“类型”字段

当然请查阅文档:

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