javascript - 如何在 Angular 8 应用程序中使用香草 JS 签名板?
问题描述
我是 Angular 新手,在将 szimek/signature_pad 集成到我的应用程序时遇到问题。我已阅读有关如何在 Angular 2+ 应用程序中使用 JavaScript 库的文章,并且它们与我尝试过的其他库一起使用。但是,我无法让 signature_pad 工作。我知道签名板的角度版本,但是,我需要使用 JavaScript 版本。
我已采取的步骤:
npm install --save signature_pad
npm install --save @types/signature_pad
import * as _signaturePad from 'signature_pad'; in app.component.ts
"scripts": ["src/app/js/signature_pad.js"]
在 angular.json
<script src="./app/js/signature_pad.js"></script>
我尝试过的每件事都会导致错误。有人可以帮忙吗?
解决方案
在一个新的 Angular 项目中让它工作对我来说并不难。
你的第一步是对的。使用 CLI 创建一个新的 Angular 应用程序并安装 signature_pad 库:
npm install --save signature_pad
注意,我没有安装类型库,但你没有理由不能。我不必将此库添加到 Angular.json,因为一旦我们导入它,Angular CLI 就会从 node_modules 自动将它包含在主应用程序中。
在我们进入打字稿之前,请确保您已在app.component.html
. 我刚刚删除了所有默认值并添加了这个:
<canvas #canvas></canvas>
请注意,我将#canvas
语法用作画布的一部分。这样我就可以在代码中访问它。
现在移动到您的app.component.ts
文件。我将从上到下回顾我的变化。
首先,导入库,如下所示:
import SignaturePad from 'signature_pad';
然后,确保该类实现了该OnInit
接口。为此,您需要导入:
import {Component, ElementRef, OnInit, ViewChild} from '@angular/core';
而且您必须在 AppComponent 类定义之后添加实现文本:
export class AppComponent implements OnInit {
现在,在组件类中,为签名板创建一个实例变量:
public signaturePad: SignaturePad;
为画布创建一个 ViewChild:
@ViewChild('canvas', {static: true }) public canvas: ElementRef;
最后,添加一个ngOnInit()
方法:
ngOnInit() {
this.signaturePad = new SignaturePad(this.canvas.nativeElement);
}
该ngOnInit()
方法初始化 SignaturePad 类,按照自述文件中的说明,将用于基础的 HTML 元素传递给它。我们通过内省nativeElement
我们的ViewChild
.
一旦我这样做了,一切都很好。
如果您愿意,您应该能够轻松地将这个库封装在一个 Angular 组件中,并且库中有许多 API 并没有用于本示例的目的。您需要深入研究lib repo 中的示例,以了解它们如何执行更改颜色、清除或保存签名等操作。
推荐阅读
- python - 我正在尝试使用 python boto3 列出 aws ECS 集群中的所有集群,它最多只能列出 100 个集群,我想要 300 个集群
- json - 如何在 pyspark 数据帧上应用 group by 并对结果对象进行转换
- multithreading - 如何使用 Tokio 限制同时执行的任务?
- python - tensorflow CNN 模型的 model.evaluate 和 model.predict 之间的准确性差异巨大
- python - python - 如何在python项目中的两个应用程序之间设置urlpatterns?
- javascript - 反应未安装的组件状态更新错误
- python - 如何根据熊猫中两个不同列的条件将值从一列复制到另一列?
- python - 数组中重复元素的查找函数
- discord.py - Discord.py 响应所有命令的函数
- html - 如何将主题实现为 html?