El procesador ha quedado en desuso en Angular 4.0.0-rc.1, lea la actualización a continuación
La forma angular2 es usar listeno listenGlobaldesde Renderer
Por ejemplo, si desea agregar un evento de clic a un Componente, debe usar Renderer y ElementRef (esto también le da la opción de usar ViewChild o cualquier cosa que recupere el nativeElement)
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
Se puede utilizar listenGlobalque le dará acceso a document, body, etc.
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Tenga en cuenta que dado que tanto beta.2 listeny listenGlobaldevuelve una función para eliminar el oyente (ver cambios rompiendo la sección de cambios para beta.2). Esto es para evitar pérdidas de memoria en grandes aplicaciones (ver # 6686 ).
Entonces, para eliminar el oyente que agregamos dinámicamente, debemos asignar listeno listenGlobala una variable que contendrá la función devuelta, y luego la ejecutamos.
// 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();
}
Aquí hay un plnkr con un ejemplo funcionando. El ejemplo contiene el uso de listeny listenGlobal.
Uso de RendererV2 con Angular 4.0.0-rc.1 + (Renderer2 desde 4.0.0-rc.3)
25/02/2017 : Rendererha quedado en desuso, ahora deberíamos usarlo RendererV2(ver línea a continuación). Ver el compromiso .
10/03/2017 : RendererV2fue renombrado a Renderer2. Ver los cambios de última hora .
RendererV2no tiene más listenGlobalfunciones para eventos globales (documento, cuerpo, ventana). Solo tiene una listenfunción que logra ambas funcionalidades.
Como referencia, copio y pego el código fuente de la implementación del DOM Renderer ya que puede cambiar (¡sí, es angular!).
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;
}
Como puede ver, ahora verifica si estamos pasando una cadena (documento, cuerpo o ventana), en cuyo caso utilizará una addGlobalEventListenerfunción interna . En cualquier otro caso, cuando pasamos un elemento (nativeElement) usará un simpleaddEventListener
Para eliminar el oyente es lo mismo que con Rendererangular 2.x. listendevuelve una función, luego llama a esa función.
Ejemplo
// 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 con Angular 4.0.0-rc.1 usando RendererV2
plnkr con Angular 4.0.0-rc.3 usando Renderer2