angular - 在Angular中移动鼠标时如何取消单击事件?
问题描述
我已经尝试了一段时间,但我无法使其工作。
我有一个带有(click)
关联方法的元素:
<span class="item-name" (click)="onClickElement(element.id)">{{element.name}}</span>
哪个导航到另一个页面:
onClickElement( id: number){
if(id){
this.router.navigate(['/some-url', id]);
}
}
这按预期工作,但是如果用户想要选择里面的文本element.name
来复制文本,如果他点击它并移动鼠标进行选择,当他释放按钮时将被转发到页面。让他回去,不得不重新加载它所在的桌子。这使得它对用户来说很烦人。
我尝试添加$event
到该(click)
方法但没有成功,但我找不到任何东西来“取消”该操作,例如使用stopPropagation
.
我还看到了一些其他的绑定(mouseup)
和(mousedown
),可能每个人都在计算您单击的坐标以查看鼠标是否已移动,但他看起来真的很脏,因为它可能需要很多代码行和实现这一点的多种功能,也让 HTML 安静“饱满”。
我可以在 onClickElement 方法中做些什么来防止这个问题吗?
解决方案
基本上你需要做两件事。首先,您必须将 传递$event
给您的方法,以便您可以preventdefault()
在其上调用该方法。
在您的模板中
<span class="item-name" (click)="onClickElement($event, element.id)">. {{element.name}}
</span>
在您的组件中
onClickElement(event: MouseEvent, id: number){
event.preventDefault()
if(id){
this.router.navigate(['/some-url', id]);
}
}
推荐阅读
- python - Python Selenium 不点击无法定位的链接
- wordpress - Wordpress 致命错误:未捕获的错误:调用未定义的方法 WP_Error::get_wc_block_data()
- python - 尝试从opencv中的.mov视频读取帧时“找不到起始编号(以文件名)”
- substrate - 您如何设置在基材中开发自己的托盘
- typescript - TS 在返回的对象中定义动态属性的类型
- vba - Get 语句生成:“无效使用 Null”
- python - 机器学习 - 输入数据的结构
- c++ - 我们可以只为内联全局函数提供一个头文件,这意味着没有 .cpp 文件吗?
- kubernetes - 为什么我们需要 Kubernetes 中的服务帐户?
- node.js - nodejs 未安装或其可执行文件不存在于路径中