如何在 Angular 中使用由 *ngFor 生成的 <canvas>
How to use <canvas> generated with *ngFor in Angular
我正在尝试在我的 Angular 应用程序中使用 *ngFor
指令创建一个包含 div
个元素的列表,其中包含 canvas
个元素。在特定 canvas
上的 (click)
事件之后,我想在相关索引处更新数组(我用 *ngFor
对其进行迭代)并在该 canvas
上绘制一个形状。
我试图在 *ngFor
循环中通过 #elementRef
设置对每个 canvas
的引用,并将引用传递给我的绘图函数 (myDrawingFunction(elementRef)
),但在数组更新后,该函数无法正确定位要绘制的单击 canvas。
您有什么建议可以实现这一目标的最佳方法是什么?
非常感谢您的帮助!
我会尝试在您的 html 中使用索引,然后使用 elementRef 和特定的 id 来检索元素并对其进行操作 您还需要强制使用 trackBy 你的 dom 可能在你的数组更新后搞砸了:
<div *ngFor="let a of arrayOfIndexes;index as i; trackBy:trackByFn">
<canvas attr.id="canvas-{{i}}" (click)="myDrawingFunction(i)"></canvas>
</div>
在你的 ts
...
arrayOfIndexes = [0, 1, 2, 3, 4, 5, 6]
...
constructor (private el:ElementRef){}
...
trackByFn(index){
return (index);
}
myDrawingFunction(index:number){
//here you retrieve your element by id eg: '#canvas-2'
let canvas = <HTMLCanvasElement>this.el.nativeElement.querySelector('#canvas-' + index);
let ctx = canvas.getContext('2d') //just an example
...
}
...
参考
我正在尝试在我的 Angular 应用程序中使用 *ngFor
指令创建一个包含 div
个元素的列表,其中包含 canvas
个元素。在特定 canvas
上的 (click)
事件之后,我想在相关索引处更新数组(我用 *ngFor
对其进行迭代)并在该 canvas
上绘制一个形状。
我试图在 *ngFor
循环中通过 #elementRef
设置对每个 canvas
的引用,并将引用传递给我的绘图函数 (myDrawingFunction(elementRef)
),但在数组更新后,该函数无法正确定位要绘制的单击 canvas。
您有什么建议可以实现这一目标的最佳方法是什么?
非常感谢您的帮助!
我会尝试在您的 html 中使用索引,然后使用 elementRef 和特定的 id 来检索元素并对其进行操作 您还需要强制使用 trackBy 你的 dom 可能在你的数组更新后搞砸了:
<div *ngFor="let a of arrayOfIndexes;index as i; trackBy:trackByFn">
<canvas attr.id="canvas-{{i}}" (click)="myDrawingFunction(i)"></canvas>
</div>
在你的 ts
...
arrayOfIndexes = [0, 1, 2, 3, 4, 5, 6]
...
constructor (private el:ElementRef){}
...
trackByFn(index){
return (index);
}
myDrawingFunction(index:number){
//here you retrieve your element by id eg: '#canvas-2'
let canvas = <HTMLCanvasElement>this.el.nativeElement.querySelector('#canvas-' + index);
let ctx = canvas.getContext('2d') //just an example
...
}
...
参考