如何在Angular 2中的组件外部获取mouseup

时间:2016-02-09 20:52:02

标签: angular

我有一个 abc 组件(页面的一部分)。它有一个事件mouseup。

@Component({
    selector: 'abc-component'
})
@View({
    <div (mousedown)="mouseDown()" (mouseup)="mouseUp()"></div>
})
export class ScheduleComponent {
    mouseDown(){
        //doSomthing
    }
    mouseUp(){}
}

但只有鼠标在<div>内时才能触发mouseup事件。如何在<div>之外触发事件?

我是否必须将(mouseup)="mouseUp()"移至 app.ts ,然后使用@Outputservice之类的内容来 app.ts 知道吗?还有其他办法吗?

由于

4 个答案:

答案 0 :(得分:12)

添加全局事件目标,例如

<div (window:mousedown)="mouseDown()" (window:mouseup)="mouseUp()"></div>

全球聆听活动。 (bodydocument同样有效)。

这当然也适用于组件类

@HostListener('window:mouseup', ['$event'])
mouseUp(event){}

答案 1 :(得分:1)

组件可以通过windowdocument对象访问事件。所以你可以在组件的构造函数中设置一个事件监听器:

constructor() {
  document.body.addEventListener("mouseup", () => { 
    this.mouseup(); 
  });
}

答案 2 :(得分:1)

在组件内部,首选其中:

@HostListener('document:mouseup', ['$event'])
onMouseUp(event: MouseEvent) {
  ...
}

通过这种方式,您无需在ngDestroy

上删除该活动

答案 3 :(得分:0)

有点老但这可能对某人有帮助,你也可以使用Observable.fromEvent:

sym