当您在其外部单击时如何阻止角垫菜单关闭?

Fle*_*per 0 angular-material angular angular7

我使用 MatMenu 作为弹出窗口来浏览我的网络应用程序上的新用户,所以我不想在用户点击它时关闭它。

我已经使用了 $event.stopPropagation() 来阻止它在我单击其中的按钮时关闭。现在我想知道如何保持打开状态,即使您单击它的外部。

Joh*_*ose 7

如果您试图停止传播整个菜单,您可以环绕 mat-menu-items。

<mat-menu [hasBackdrop]="false">
     <div  (click)="$event.stopPropagation()" (keydown)="$event.stopPropagation()">
       <your-app></your-app>
     </div>
</mat-menu>
Run Code Online (Sandbox Code Playgroud)


G. *_*ter 5

单击由覆盖背景处理。您可以根据菜单的打开和关闭动态地向背景应用/删除类,并使用带有指针事件的CSS 来阻止背景单击。

例如:

超文本标记语言

<button mat-button [matMenuTriggerFor]="menu" (menuOpened)="preventCloseOnClickOut()" (menuClosed)="allowCloseOnClickOut()">Menu</button>
Run Code Online (Sandbox Code Playgroud)

TS

export class MenuOverviewExample {
  constructor(private overlayContainer: OverlayContainer) {}

  preventCloseOnClickOut() {
    this.overlayContainer.getContainerElement().classList.add('disable-backdrop-click');
  }

  allowCloseOnClickOut() {
    this.overlayContainer.getContainerElement().classList.remove('disable-backdrop-click');
  }
}
Run Code Online (Sandbox Code Playgroud)

全球CSS

.disable-backdrop-click .cdk-overlay-backdrop.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing {
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这对我有用。我想补充一点,您需要从“@angular/cdk/overlay”导入{OverlayContainer};首先在你的 TS 文件中。 (2认同)

小智 5

我认为 [hasBackdrop]="false" 和 [hasBackdrop]="true" 可以处理

  • 这应该是真正的答案,但只是为了添加一个额外的注释,您需要设置 [hasBackdrop]="false",以防止在单击菜单外部时关闭菜单。 (3认同)