如何防止角度应用中路由器链接的默认单击行为



尽管这在理论上不是特定于角度的,但它需要在ng应用程序中解决,并且没有一个示例有效。我已经看到了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,我可以通过在锚点内添加一个元素并像这样单击内部元素来使其工作:

(click)="$event.stopPropagation();$event.preventDefault()"

我的真实世界示例在锚点内有垫子图标,所以我使用它,但建议在内部跨度上方的链接中使用它。

路由器链接不尊重preventDefault的原因在这里描述。

解决方案是为锚点创建内部元素,如果已经没有一个(如图标(。在上面的链接中,内部创建了一个跨度,但我在锚点内有图标,为了清楚起见,我从问题中省略了这些图标:

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

最新更新