【发布时间】:2019-10-09 09:30:32
【问题描述】:
任务 - 为 Angular 库创建一个可重用的按钮/锚标记属性选定组件,其中尽可能多的行为逻辑绑定在组件本身而不是 HTML 标记上。
HTML 标记应该尽可能干净
<a routerLink="" attributeSelectorForComponent></a>
问题 - 当[attr.disabled] 出现在锚标记上时,尝试通过点击侦听器阻止 routerLink 触发。
@HostListener('click', ['$event']) onMouseClick(event: Event) {
event.stopImmediatePropagation();
event.preventDefault()
}
为简单起见,从等式中删除了禁用的逻辑,routerLink 仍然会被触发。
建议的解决方案 - How can I conditionally disable the routerLink attribute? 并不能真正帮助解决我的问题,禁用指针事件只会禁用鼠标事件而不是键盘事件,并且还会阻止我删除指针事件:鼠标悬停时没有,单击 ect 需要一个相对复杂的解决方案来检测禁用属性并相应地删除 css,通常看起来更像是一个 hacky 解决方案而不是正确的解决方案。
【问题讨论】:
-
您可以像任何其他指令一样覆盖
routerLink指令 -
试试
<a [routerLink]="disabled ? 'javascript:void(0)' : 'a' " >a link</a>
标签: javascript angular angular-router preventdefault angular-routerlink