我有<table>
个用户。可以单击每个<tr>
以打开包含用户详细信息的信息面板。再次单击它会关闭面板。
<tr (click)="data.info = invert(data.info);">
<tr>
还有用于修改或删除用户的图标。这些是单独的<td>
s。
<td (click)="delete(data?._id, rowIndex); $event.stopPropagation();">
问题是当我点击修改或删除图标时,<tr>
&#39; (click)
事件也会触发。是的,这可以通过向我调用的函数添加$event.stopPropagation()
来轻松解决。但有趣的是,它不仅会阻止父元素的触发点击事件,还会阻止DOM中的任何其他操作。
单击删除图标时调用的函数只是更改一个变量,该变量应导致div
显示确认框(ngIf
)。变量确实发生了变化,但只有在我第二次点击图标后,div
才会出现。有趣的是,如果我第二次点击屏幕上的任何地方,它也会起作用。
即使<tr>
没有(click)
操作,也会发生同样的情况。
如果我将stopPropagation()
移动到我调用的delete
函数,这没有用,而且我把它放在函数中的位置并不重要。
问题是,如果我在点击<td>
时使用正确的方法来停止传播?
答案 0 :(得分:4)
好的,我找到了。这是其他人可能遇到的问题,我没有找到任何解决方案。
问题的根源是我试图通过更改delete()
函数中的变量来显示的组件是@ViewChild
。任何其他组件或纯DOM元素都不会出现此问题。
解决方案只是将ChangeDetectorRef
添加到父组件的constructor
并将其放在delete()
函数的末尾:
this._changeDetectorRef.detectChanges();
event.stopPropagation();
答案 1 :(得分:3)
您可以尝试简单地添加:
(contextmenu)=" false"
或者如果你想调用一个函数:
(contextmenu)="click(); false"
答案 2 :(得分:0)
当您单击td并调用delete()方法时。您应该在delete方法中停止传播。
例如:
delete():void{event.stopPropagation(); //rest lines of codes}
尝试此操作并从模板中删除传播。它应该解决这个问题。