렌더러는 Angular 4.0.0-rc.1에서 더 이상 사용되지 않습니다. 아래 업데이트를 읽으십시오
angular2 방법은 사용하는 것 listen
또는 listenGlobal
에서 렌더러
예를 들어 클릭 이벤트를 구성 요소에 추가하려면 렌더러 및 ElementRef를 사용해야합니다 (이렇게하면 ViewChild를 사용하는 옵션 또는을 검색하는 모든 항목이 제공됨 nativeElement
)
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
당신은 사용할 수 있습니다 listenGlobal
당신에게 액세스 권한을 부여 할 것을 document
, body
등
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
beta.2 이후 모두 참고 listen
하고 listenGlobal
(참조 리스너를 제거하는 기능을 반환 변경 깨는 beta.2에 대한 변경 로그에서 절). 이는 큰 응용 프로그램에서 메모리 누수를 방지하기위한 것입니다 ( # 6686 참조 ).
따라서 동적으로 추가 한 리스너를 제거하려면 반환 된 함수를 보유 할 변수 listen
또는 listenGlobal
변수를 할당 한 다음 실행해야합니다.
// listenFunc will hold the function returned by "renderer.listen"
listenFunc: Function;
// globalListenFunc will hold the function returned by "renderer.listenGlobal"
globalListenFunc: Function;
constructor(elementRef: ElementRef, renderer: Renderer) {
// We cache the function "listen" returns
this.listenFunc = renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
});
// We cache the function "listenGlobal" returns
this.globalListenFunc = renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
}
ngOnDestroy() {
// We execute both functions to remove the respectives listeners
// Removes "listen" listener
this.listenFunc();
// Removs "listenGlobal" listener
this.globalListenFunc();
}
다음 은 예제가 작동 하는 plnkr 입니다. 이 예는의 사용을 포함 listen
하고 listenGlobal
.
Angular 4.0.0-rc.1 +와 함께 RendererV2 사용 (4.0.0-rc.3 이후의 Renderer2)
RendererV2
listenGlobal
글로벌 이벤트 (문서, 본문, 창) 에는 더 이상 기능 이 없습니다 . 그것은 listen
두 기능을 모두 달성 하는 기능 만을 가지고 있습니다.
참고로 DOM 렌더러 구현 의 소스 코드 를 복사하여 붙여 넣을 수 있습니다 (예 : 각도입니다).
listen(target: 'window'|'document'|'body'|any, event: string, callback: (event: any) => boolean):
() => void {
if (typeof target === 'string') {
return <() => void>this.eventManager.addGlobalEventListener(
target, event, decoratePreventDefault(callback));
}
return <() => void>this.eventManager.addEventListener(
target, event, decoratePreventDefault(callback)) as() => void;
}
보시다시피 이제 문자열 (문서, 본문 또는 창)을 전달하는지 확인합니다.이 경우 내부 addGlobalEventListener
함수를 사용합니다 . 다른 경우에는 요소 (nativeElement)를 전달하면 간단한addEventListener
리스너를 제거하려면 Renderer
각도 2.x에서 와 동일합니다 . listen
함수를 반환 한 다음 해당 함수를 호출합니다.
예
// Add listeners
let global = this.renderer.listen('document', 'click', (evt) => {
console.log('Clicking the document', evt);
})
let simple = this.renderer.listen(this.myButton.nativeElement, 'click', (evt) => {
console.log('Clicking the button', evt);
});
// Remove listeners
global();
simple();
plnkr 와 각도 4.0.0-rc.1 사용 RendererV2을
plnkr 와 각도 4.0.0-rc.3 사용 Renderer2을