【问题标题】:Creating a clickable div dynamically with Angular 6使用 Angular 6 动态创建可点击的 div
【发布时间】:2018-09-02 21:03:47
【问题描述】:

我希望向用户显示一张图片,其中包含不同数量的 div(取决于检测到的面孔数量),这些 div 应该是可点击的(点击一张面孔将显示该特定面孔的一些属性)。

所以理想情况下,我想在每个面周围创建一些 div(或按钮),并为每个元素设置类似 (click)="divClicked()" 的内容。 但是,(click) 不是合法属性,因此,例如,尝试类似

d3.select('button').attr('(click)','onClickMe()');

给出一个错误。 onclick 是一个合法属性,但通过使用它,我认为我应该打破 Angular 想要我工作的方式(因为将函数放在组件的 ts 文件中会导致错误 onClickMe is not defined)。

我能想到的最好的解决方法是为每个 div 分配一个 id,然后执行类似的操作

document.getElementById('b1').onclick=this.onClickMe;

但这感觉像是糟糕的编码。

那么,这样做的干净方法是什么?

【问题讨论】:

  • 你有这方面的 Stackblitz 吗?
  • @SiddharthAjmera 不,我的 IDE 是 Visual Studio Code(我的操作系统是 Ubuntu)。
  • 我的意思是你能创建一个在 StackBlitz 上复制这个问题的示例项目吗? stackblitz.com/fork/angular
  • 哦!稍后如果有必要(因为我需要创建一些假数据,而不是从服务器复制处理 json 数据的整个代码),但问题本身是关于干净的编码而不是关于特定的项目/代码。
  • 你为什么不认为(click) 是合法的?

标签: javascript angular


【解决方案1】:

我认为您应该通过在模板to display your divs 中添加带有ngFor 的循环来创建div 元素。当然,它们可能是 CSS 样式的,基于您事先确定的一些属性(特别是 CSS 属性 lefttop 在这里很有用)。当然你也可以在divs 上添加一个(click)-event。

为此,您的组件应该包含一个要显示的对象列表,您可以在必要时对其进行更新。此外,它应该提供一种方法,当用户想要查看特定面部的细节时调用该方法。 然后,模板只关心将这些对象转换为 HTML 结构并绑定回调。

在您的模板中将出现类似于以下结构的内容:

<div
    *ngFor="let face of faces; index as i"
    (click)="showFaceDetails(i)"
    [style.left.px]="face.x"
    [style.top.px]="face.y"
></div>

【讨论】:

  • 这很有帮助,虽然我必须说因为我正在构建的页面是响应式的(所以左上等必须基于与原始图像相关的实际图像形状)我不'认为用 ngFor 设置这些属性是不可行的。 (实际上现在我用 img.onload 函数设置它们本身感觉就像糟糕的编码,但我不确定在前端是否可以进行实际的干净编码:P)
猜你喜欢
  • 2016-11-27
  • 2016-09-27
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多