2017-12-20 8 views
2

Angular2 - 私はテンプレートを使用して単純なコンポーネント作成しました(クリック)する前にイベントをトリガする方法や(routerLink)

:* .TSで

<div (click)="onClick();">Click me</div> 

が、私はそのような何かを持っているファイル

public onClick() { 
    console.log('click'); 
} 

@HostListener('document:click', ['$event']) 
public onClickListener(event: Event) { 
    console.log('click listener'); 
} 

この場合、onClick関数は、常にの前に呼び出され、onClickListenerの前に呼び出されます。

私の目標は、それが可能だ角度(クリック)または(routerLink)などの前にいくつかのメソッドを呼び出すために

のですか?

重要なこと - このリスナーは、実行時にすべてのクリックを処理するグローバルメソッドである必要があります。

+0

クリックする前に何を呼び出しようとしていますか?なぜクリックイベントで処理できないのですか? – LLai

+0

問題を正しく理解していると思います。どうしてやらないのですか?public onClick(){methodToExecuteBefore(); console.log( 'click'); }? – mickdev

+0

onClickListenerは最終的にルート(メイン)コンポーネントにあり、すべてのクリックを処理する必要があります(クリックするだけでなく)。 – szmitas

答えて

1

Angularで処理する前にアプリケーションの任意の場所でクリックイベントを処理する場合は、クリックイベントリスナをウィンドウに追加して、イベントが処理されるように指定することができます(capture phase)。次のコードスニペットでは、useCaptureをtrueに設定してaddEventListener("click", fn, useCapture)を呼び出します(MDN documentation参照)。

window.addEventListener("click",() => { 
    console.log("Global click handler"); 
}, true); 

this plunkerで確認できます。

+1

非常に良い実装 – LLai

+0

それは私が探していたものです。 – szmitas

関連する問題