我正在尝试在Angular2应用程序中实现打印功能。我遇到了这个包html2canvas。它看起来令人印象深刻,但当我试图在我的应用程序中包含它时,它给我一个错误。
以下是我遵循的步骤
<script src="scripts/html2canvas.js"></script>
declare var html2canvas: any;
添加代码以打印(当用户点击打印按钮 - 测试代码时)
printview(): void {
html2canvas(document.body).then(function(canvas) {
document.body.appendChild(canvas);
});
}
但是一旦用户点击打印按钮,我就会收到以下错误
browser_adapter.ts:78 ReferenceError: html2canvas is not defined
任何帮助或提示都会有用......
答案 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