【发布时间】:2019-08-09 15:26:59
【问题描述】:
在 Jquery 中添加了单个事件监听器到 <ul>,这样我就可以通过事件冒泡监听当前 li 上的事件。
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
</ul>
请建议如何在角度实现相同。 我正在尝试以下方式:
1) 我只能通过 $event.target 获取选定的列表元素,但无法获取绑定到列表的数据
<ul (click)="onListClick($event)">
<li *ngFor="let data of [1, 2, 3, 4]"></li>
</ul>
2) 我可以在点击监听器中获取绑定到列表的数据,因为我是直接点击 li 上的事件
<ul>
<li (click)="onListClick(data)" *ngFor="let data of [1, 2, 3, 4]"></li>
</ul>
注意:
我的目标是减少事件侦听器,所以我将事件绑定到<ul> 标签而不是<li>,但我必须找到将<li> 数据获取到<ul> 点击侦听器的方法。
【问题讨论】:
-
您可以尝试这样做:
[attr.data-target]="data"我的问题是您尝试过$event.target.value吗?给元素设置数据,并尝试通过相同的属性来提取。 -
理想情况下,您应该首先在组件中包含
data,然后将其绑定到您的ul。 -
我的目标是减少事件监听器..为什么?这似乎毫无意义?正确的做法是点击
<li>,因为这就是您点击的内容。点击<ul>没有任何好处? -
@Liam 如果我们有 100 个列表项,那么我有 100 个单击事件侦听器,这将导致性能问题,所以我想在
- 使用 1 个单击侦听器,而不是在
- 使用 100 个单击侦听器>,如果我错了,请纠正我们
-
事件监听器的开销很小。除非您有证据证明这是一个性能瓶颈,否则这是过早的优化 (the root of all evil)。我想说你更大的问题是谁想在屏幕上看 100 里!
标签: angular typescript