Javascript 是否有任何方法可以禁用/阻止选项;在新选项卡/窗口中打开“;在Angular 5中使用RouterLink时?

Javascript 是否有任何方法可以禁用/阻止选项;在新选项卡/窗口中打开“;在Angular 5中使用RouterLink时?,javascript,angular,routing,router,routerlink,Javascript,Angular,Routing,Router,Routerlink,我有一个单页应用程序,并在anchor tag()中使用RouterLink导航到其他页面而不刷新 <ul class="menu"> <li *ngIf="isContain(adminFilterMenuItems, 'Setup')"> <a id="NavSetupButton" routerLink="/setup"> <img alt="Setup" src="./ass

我有一个单页应用程序,并在anchor tag()中使用RouterLink导航到其他页面而不刷新

<ul class="menu">
          <li *ngIf="isContain(adminFilterMenuItems, 'Setup')">
            <a id="NavSetupButton" routerLink="/setup">
              <img alt="Setup" src="./assets/images/Setup.png" />
            </a>
          </li>
</ul>
我需要在右键点击时禁用一些选项,如“在新选项卡中打开”、“在新窗口中打开”等,而不是禁用整个上下文菜单,我需要上下文菜单

我注意到,当我不使用RouterLink并实现其他逻辑来导航时,我在右键单击上看不到我想要的那些选项。但我使用的是RouterLink,不想因为这样的要求而影响整个应用程序


在使用RouterLink进行导航时,有没有办法禁用右键单击上下文菜单的一些选项?

您可以在锚定tah上尝试oncontextmenu事件,如下面的示例所示


尝试将其纳入您的代码中

<a href="https://www.w3schools.com/" oncontextmenu="return false;">W3schools</a>

右键单击的选项列表称为关联菜单。有多种方法可以禁用它。前面提到的答案(
oncontextmenu=“return false;”“
)是一个优雅的解决方案

但是,由于这是一个角度相关的问题,让我们编写一个属性指令:

import { Directive, HostListener } from '@angular/core';

@Directive({
  selector: '[appDisableRightClick]'
})
export class DisableRightClickDirective {
  @HostListener('contextmenu', ['$event']) onContextMenu($event: any) {
    $event.preventDefault();
  }
}
现在可以使用
[routerLink]
指令将其传递给锚定标记。例如

<a routerLink="sample" appDisableRightClick>About</a>

在StackBlitz应用程序中,“关于”和“服务”链接的上下文菜单被禁用,而“测试”链接未被修改


说明: decorator声明要侦听的DOM事件,并提供事件处理方法。我们收听通常在单击鼠标右键或上下文菜单键时触发的事件。在实现中,调用事件的方法,该方法告诉浏览器不应像通常那样执行其默认操作。在我们的例子中,禁用上下文菜单打开



应用程序从中派生。

我找到了一个适合我的解决方法。 我没有使用RouterLink,而是调用了click事件并编写了一个方法“navigateTo”, 因此,这个单击事件将调用我的“navigateTo”方法,该方法将完成页面导航的工作

HTML文件

<ul class="menu">
      <li *ngIf="isContain(adminFilterMenuItems, 'Setup')">
        <a id="NavSetupButton" (click)="navigateTo('/setup')">
          <img alt="Setup" src="./assets/images/Setup.png" />
        </a>
      </li>
</ul>

这取决于正在生成的html。使用
[routerLink]
将生成一个带有href属性的锚元素。浏览器会将此视为常规链接,并提供通常在链接上要求的任何选项。听起来你已经尝试过其他对你有用的方法了——为什么不使用它们呢me@KurtHamilton是的,我做了实验,找到了一个有效的解决方案,但对我来说,这就像是修补工作,我正在寻找一个更强大的解决方案。嗨,谢谢你的回答。我不想完全禁用上下文菜单,只想禁用几个选项。我找到了一个解决办法,现在自己回答这个问题。嗨,谢谢你的回答。我不想完全禁用上下文菜单,只想禁用几个选项。我找到了一个解决办法,自己加了一个答案。嗨,谢谢你的回答。我不想完全禁用上下文菜单,只想禁用几个选项。我找到了解决办法,自己加了一个答案
  navigateTo(component) {
    this.router.navigate([component]);
  }