【问题标题】:Select a div from dynamically created div elements - Angular从动态创建的 div 元素中选择一个 div - Angular
【发布时间】:2020-06-12 09:36:23
【问题描述】:

我正在编写代码来使用*ngFor 指令动态创建div 元素,如下所示:

<div *ngFor = "let item of Items">
<p>Item : {{item}} </p>
</div>

现在,当我将鼠标悬停在特定的 div 部分上时,只需要使用一些背景颜色突出显示该 div 部分。

如果我在div 标签上使用mouseenter 属性,它会选择所有div 元素,而不是选择我用鼠标悬停的确切元素。

 <div (mouseenter) ="hovered=true" 
       (mouseleave) ="hovered=false" 
       *ngFor = "let item of Items"  
       [style.background]="hovered? 'red' : none">
      <p>Item : {{item}} </p>
  </div>

那该怎么做呢?

【问题讨论】:

  • 你试过 CSS 吗?
  • 是的,我试过了,它适用于所有的 div 元素
  • 向我们展示你的 CSS
  • 在这种情况下你的 CSS 是错误的
  • 您在使用let item in Items时没有收到编译器错误吗?

标签: html css angular typescript css-selectors


【解决方案1】:

我想知道您的*ngFor 本身是如何工作的,原因是您使用的是let item in Items 而不是let item of Items(它是of 不应该是in

app.component.html

<div *ngFor = "let item of Items">
  <p> Item: {{item}}  </p>
</div>

app.component.css

div:hover{
  background-color: yellow;
}

Working Stackblitz

编辑:

根据您编辑的问题,您将悬停分配给所有元素,而不是您需要使用您需要使用的索引将悬停分配给每个单独的元素,

<div (mouseenter)="hover=i" (mouseleave)="hover=-1" *ngFor = "let item of Items;let i = index"
       [style.background]="hover=== i ? 'red' : none">
  <p> Item: {{item}}  </p>
</div>

现在您可以在没有任何 css 的情况下实现结果,工作示例如下,

Edited Stackblitz

【讨论】:

  • 我同意你的回答,但我做错了什么?
  • @SaravananKS,我已经编辑了我的答案.. 请检查.. 您需要使用索引将hover 分配给元素..
【解决方案2】:

使用 CSS :hover 伪类

html

<div *ngFor="let item of items">
  <p class="hover-target">Item : {{item}} </p>
  <p>footer</p>
</div>

css

.hover-target:hover {
  background-color: red;
  /* whatever styles you want to apply */
}

注意 - 您的 *ngFor 语法错误。应该是*ngFor="let item of Items"

演示:https://stackblitz.com/edit/angular-kp4zfv

【讨论】:

  • 我同意你的回答,但我做错了什么?
  • 您没有将悬停范围限定为一行 - 您是说整个数组要么悬停要么不悬停
  • 理解索引概念
猜你喜欢
  • 2012-09-19
  • 1970-01-01
  • 2021-10-10
  • 2021-10-03
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 2017-08-11
  • 2016-04-29
相关资源
最近更新 更多