【发布时间】:2017-04-13 15:03:18
【问题描述】:
我的组件有一个非常奇怪的问题(以前从未见过)。单击 ngFor 列表中的按钮时,我试图删除一行。当我只有一行时它可以工作,但是当它超过一行时,事件会被触发两次,一次用于好行,一次用于第一行(删除另一行后):
<label>
<div class="tag" *ngFor="let o of selectedOptions;">
<span class="tag-text">{{ o.textContent }}</span>
<button (click)="removeTag(o)" type="button" class="fa fa-times"></button>
</div>
</label>
这是我的方法,女巫被调用了两次(仅当有多个“选项”时):
public removeTag (option: NxtSelectOptionComponent) {
this.selectedOptions = [
...this.selectedOptions.filter(o => o !== option),
]
}
我尝试使用 splice,我尝试添加 stopPropagation...我不明白我已经做了很多时间,这是我第一次看到。
编辑:当我点击 .tag 元素时调用 removeTag 方法这就是为什么当我点击按钮时它被调用两次,但我不知道为什么...... (click) 属性是仅在按钮上
问题已解决:我找到了问题...仅供参考标签标签将点击按钮,因此如果您有任何(点击)属性,它将被触发两次。
【问题讨论】:
-
你检查你的过滤功能了吗?这不是问题吗?您是否尝试在 removeTag() 函数中添加一些
console.log()以查看它是否被调用了两次?也许你应该尝试在 removeTag 函数的末尾console.log(this.selectedOptions)看看有什么改变。让我们知道是否有新的东西,因为现在它很奇怪。你的代码很好,所以... -
谢谢 我没有过滤功能。 removeTag 被调用两次。我发现即使我单击 .tag 元素也会调用它(女巫是为什么 removeTag 被调用两次)我不知道为什么,如果我单击 .tag 元素,目标(在事件对象内)是列表 o_O 的第一个按钮!
-
你能在 Plunker 中重现吗?
-
我发现了问题...仅供参考标签标签将点击按钮,因此如果您有任何(点击)属性,它将被触发两次。
标签: angular typescript