javascript - 如何防止 Angular 应用程序中路由器链接的默认点击行为?

标签 javascript html angular typescript angular-routing

尽管这在理论上不是特定于 Angular ,但它需要在 ng app 中解决,并且这些示例都不起作用。我已经看到了 SO 中的所有答案,但这些解决方案似乎都不适用于现实生活中的 Angular7 应用程序。例如,以下都不起作用:

<!-- option 1 -->
<a class="nav-link" [routerLink]='["/properties", sessionId]'
 (click)="$event.stopPropagation()">Properties
</a>
<!-- option 2 -->
<a class="nav-link" [routerLink]='["/properties", sessionId]'
 (click)="$event.stopPropagation();false">Properties
</a>
<!-- option 3 -->
<a class="nav-link" [routerLink]='["/properties", sessionId]'
 (click)="$event.preventDefault()">Properties
</a>
<!-- option 4 -->
<a class="nav-link" [routerLink]='["/properties", sessionId]'
 (click)="$event.preventDefault();false">Properties
</a>

在 component.ts 中为处理程序创建方法并在返回或不返回 false 的情况下调用任一函数也不起作用。

另外,我不想禁用链接,因为它需要在其他浏览器选项卡/窗口中可拖动/可打开。

编辑:这里是 https://github.com/angular/angular/issues/21457我可以通过在 anchor 内添加一个元素并点击内部元素来使其工作,如下所示:
(click)="$event.stopPropagation();$event.preventDefault()"

我的真实世界示例在 anchor 内有 mat-icon,所以我使用它,但建议在跨度上方的链接中使用。

最佳答案

routerLink 不尊重 preventDefault 的原因描述here .
解决方案是为 anchor 创建内部元素(如果还没有)(如图标)。在上面的链接中,内部创建了一个跨度,但我在 anchor 中有图标,为了清楚起见,我从问题中省略了这些图标:

  <a class="nav-link" [routerLink]='["/map", sessionId]'>
    <mat-icon class="tab-nav-item-icon" (click)="$event.stopPropagation();$event.preventDefault()">map</mat-icon>
  </a>

关于javascript - 如何防止 Angular 应用程序中路由器链接的默认点击行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56559996/

相关文章:

javascript - 具有多级导航的 toggleClass

javascript - Angular - 指令的输入在按下按钮时不更新

javascript - 过滤剑道下拉列表以删除选项

jquery - 弹出 div 以保持在可见屏幕的中心

javascript - 是否用具体对象推送到可观察数组?

javascript - 如何使用jquery将图像显示为html文件? (一些 php 和 xml)

angular - 我们真的需要 URL 重写模块来在 IIS 上托管 Angular 应用程序吗?

javascript - Angular 5 ngModel 不更新值

javascript - jQuery Ajax 请求 200 但状态错误

javascript - Laravel 使用 onchange 隐藏表单