如何在Angular2中检测div的中间点击?

Art*_*ary 4 javascript angular

假设我们有这个模板:

<div class="myClass" (click)="doSomething($event)">
Run Code Online (Sandbox Code Playgroud)

soSomething不会在中间点击时调用。我怎么解决这个问题?

the*_*nuu 8

我通过使用middleclick侦听mouseup事件的小型自定义指令解决了此问题,因为在我的示例中(在macOS上),clickHostListener不会在单击中触发。

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

@Directive({ selector: '[middleclick]' })
export class MiddleclickDirective  {
  @Output('middleclick') middleclick = new EventEmitter();

  constructor() {}

  @HostListener('mouseup', ['$event'])
  middleclickEvent(event) {
    if (event.which === 2) {
      this.middleclick.emit(event);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,你可以使用类似

<button (middleclick)="doSomething()">Do something</button>
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案谢谢。但 `which` 已[弃用](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which)。使用`event.button === 1`来检测中间[按钮](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button)。 (5认同)

Gün*_*uer 3

这应该有效

<div class="myClass" (click)="$event.which == 2 ? doSomething($event) : null">
Run Code Online (Sandbox Code Playgroud)

另请参阅使用中键单击触发 onclick 事件

更新 2/2018

当我发布上面的答案时,我正在一台 Linux 机器上工作,它对我有用。

现在我在 Mac 上,除了鼠标左键之外,我无法获取其他任何内容的单击事件。

您可以自己尝试使用

StackBlitz 示例

也可以看看