2016-02-09 20 views
5

私はabcコンポーネント(ページの一部)を持っています。それはイベントmouseupを持っています。とき<div>の内部マウスコンポーネントの外側で角2のマウスアップを取得する方法

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

しかし、mouseUpイベントにのみトリガすることができます。 <div>の外でもイベントをトリガーするにはどうすればよいですか?

私は(mouseup)="mouseUp()"にapp.tsを移動して、app.tsが知っているように@Outputまたはserviceのようなものを使用する必要がありますか?他の方法はありますか?

おかげ

答えて

8

グローバルイベントに耳を傾けること

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

のような世界的なイベントターゲットを追加します。 (bodydocumentも同様です)。

これは、コンポーネント内のコンポーネントクラス

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

ありがとう!角度2の方法に切り替え –

+1

すみません、ちょうどベッドから出ました;-)訂正してくれてありがとう! –

1

成分はwindowdocumentオブジェクトを介してイベントにアクセスすることができます。だから、コンポーネントのコンストラクタでイベントリスナーを設定できます。

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

ありがとう、@MattScarpinoは 'function(){}'から '()=> {}'に変更するだけです。そうでなければ、 'mouseup()'を見つけることができません。 –

1

にも、もちろん作品その次のように行うことが好ましい:あなたは上のイベントを削除する必要はありません

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

このようにngDestroy

関連する問題