Il rendering è stato deprecato in Angular 4.0.0-rc.1, leggi l'aggiornamento di seguito
Il modo angular2 è usare listeno listenGlobalda Renderer
Ad esempio, se si desidera aggiungere un evento clic a un componente, è necessario utilizzare Renderer ed ElementRef (questo offre anche l'opzione di utilizzare ViewChild o qualsiasi cosa che recupera il nativeElement)
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
È possibile utilizzare listenGlobalche vi darà l'accesso a document, bodye così via
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Si noti che da beta.2 entrambi listene che listenGlobalrestituiscono una funzione per rimuovere l'ascoltatore (vedere la sezione relativa alla modifica delle modifiche dal log delle modifiche per beta.2). Questo per evitare perdite di memoria nelle grandi applicazioni (vedi # 6686 ).
Quindi per rimuovere il listener che abbiamo aggiunto dinamicamente dobbiamo assegnare listeno listenGlobala una variabile che conterrà la funzione restituita, e quindi la eseguiremo.
// 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();
}
Ecco un plnkr con un esempio funzionante. L'esempio contiene l'uso di listene listenGlobal.
Utilizzo di RendererV2 con Angular 4.0.0-rc.1 + (Renderer2 dalla 4.0.0-rc.3)
25/02/2017 : Rendererè stato deprecato, ora dovremmo usare RendererV2(vedi riga sotto). Vedi il commit .
10/03/2017 : è RendererV2stato rinominato in Renderer2. Vedi i cambiamenti di rottura .
RendererV2non ha più listenGlobalfunzione per eventi globali (documento, corpo, finestra). Ha solo una listenfunzione che raggiunge entrambe le funzionalità.
Per riferimento, sto copiando e incollando il codice sorgente dell'implementazione di DOM Renderer poiché potrebbe cambiare (sì, è angolare!).
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;
}
Come puoi vedere, ora verifica se stiamo passando una stringa (documento, corpo o finestra), nel qual caso utilizzerà una addGlobalEventListenerfunzione interna . In ogni altro caso, quando passiamo un elemento (nativeElement) userà un sempliceaddEventListener
Per rimuovere l'ascoltatore è lo stesso di Rendererin angolare 2.x. listenrestituisce una funzione, quindi chiama quella funzione.
Esempio
// 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