【发布时间】:2020-05-18 15:20:42
【问题描述】:
我正在尝试做的事情:
- 创建一个“调整大小”角度指令,允许用户拖动 DOM 元素的边框并调用自定义应用程序逻辑(完成)
- 确保点击不会冒泡到父组件。
stackblitz 链接 -> stackblitz example
组件层次结构是这样的
- app.component > parent.component > child.component(子组件使用'resize'指令)
在“resize.directive”中。
- mousedown 事件被捕获,
event.stopPropagation()&event.preventDefault()用于防止事件冒泡 - mousedown 事件仅在用户的鼠标悬停在边框上时才会被捕获
child.component
- 是一个使用'resize'指令的简单div
父组件
- 使用
@HostListener('click', ['$event']) - 我需要监听父容器上的“点击”事件,以确定它何时被选中。所以我不能简单地摆脱它。
当您将鼠标悬停在内部子组件上时,您可以单击以拖动元素的边框并调整其大小。我正在努力解决的是父组件中“点击”处理程序的事件传播。
我的问题是 @HostListener click 事件正在从父组件触发,而我并不期望它会这样。即,如果您拖动子组件的边框。鼠标抬起时,ParentComponent 的点击事件被触发。
我的理解是这样的
- 为防止单击事件的事件传播,应在 mousedown 事件中捕获该事件。因此
stopPropagation()
然而父组件仍在拾取点击事件。
周围有很多 cmets 使用return false。但是,根据其他问题,这似乎不是原因,如此处所示。
话虽如此,即使我将return false 添加到指令中,事件仍然会冒泡。
感谢您对我可能遗漏的任何见解。
【问题讨论】:
标签: javascript angular dom-events stoppropagation