2017-12-20 27 views
2

(routerLink) 트리거하는 방법 : * .TS에서Angular2 - (클릭) 전에 이벤트 또는 내가 템플릿 간단한 구성 요소 만든

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

을 나는 그런 식으로 뭔가있어 파일 :

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

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

이 경우 onClick 함수는 항상 이라는 clickListener 앞에 호출됩니다.

내 목표는 등 약간의 각도가 (클릭) 이전 방법 또는 (routerLink)

그것은 가능을 호출하는 것입니다?

중요한 것은 -이 수신기는 전역 메서드로, 런타임 중에 모든 클릭을 처리해야합니다.

+0

클릭하기 전에 무엇을 호출하려고하십니까? 클릭 이벤트에서 처리 할 수없는 이유는 무엇입니까? – LLai

+0

문제를 올바르게 이해하고 있습니다. 왜 그냥하지 : public onClick() {methodToExecuteBefore(); console.log ('클릭'); }? – 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