【发布时间】:2021-05-24 23:15:32
【问题描述】:
在菜单外单击时如何关闭自定义上下文菜单?
假设自定义简化上下文菜单是打开的。在上下文菜单之外的任何按钮单击都应关闭上下文菜单并触发按钮操作。
您可以在许多 stackoverflow 帖子中找到此自定义上下文菜单。它工作得很好。您可以找到一个工作示例via this nice short StackBlitz example。只需启动示例,右键单击以打开自定义上下文菜单。现在尝试通过单击菜单外部来关闭该上下文菜单。
简而言之,简化的 CUSTOM 上下文菜单是:
<div class="contextmenu" [ngStyle]="{'left.px': x, 'top.px': y}">
this is your contextmenu content
</div>
附上代码:
@Component({
selector: 'app-contextmenu',
templateUrl: './contextmenu.component.html',
styleUrls: ['./contextmenu.component.css']
})
export class ContextmenuComponent implements OnInit {
constructor() { }
ngOnInit() {}
@Input() x=0;
@Input() y=0;
}
父母:
<div (click)="disableContextMenu()" oncontextmenu="return false;">
<ul>
<li (contextmenu)="onrightClick($event)">right click me!</li>
</ul>
<div *ngIf="contextmenu==true">
<app-contextmenu [x]="contextmenuX" [y]="contextmenuY"></app-contextmenu>
</div>
</div>
用逻辑:
contextmenu = false;
contextmenuX = 0;
contextmenuY = 0;
onrightClick(event) {
this.contextmenuX = event.clientX
this.contextmenuY = event.clientY
this.contextmenu = true;
}
disableContextMenu() {
this.contextmenu = false;
}
【问题讨论】:
-
谢谢。当在另一个按钮上完成上下文菜单之外的单击时,该单击会同时触发 (clickOutside)=handler($event) 和按钮吗?
-
是的,它会触发外部点击上下文菜单和按钮点击按钮没有任何问题
-
附加文档监听器的常用方法对您不起作用?
标签: angular