Renderer telah ditinggalkan dalam Angular 4.0.0-rc.1, baca pembaruan di bawah ini
Cara angular2 adalah menggunakan listenatau listenGlobaldari Renderer
Misalnya, jika Anda ingin menambahkan acara klik ke Komponen, Anda harus menggunakan Renderer dan ElementRef (ini memberi Anda juga opsi untuk menggunakan ViewChild, atau apa pun yang mengambil nativeElement)
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
Anda dapat menggunakan listenGlobalyang akan memberikan Anda akses ke document, body, dll
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Perhatikan bahwa sejak beta.2 keduanya listendan listenGlobalmengembalikan fungsi untuk menghapus pendengar (lihat memecah bagian perubahan dari changelog untuk beta.2). Ini untuk menghindari kebocoran memori pada aplikasi besar (lihat # 6686 ).
Jadi untuk menghapus pendengar kita menambahkan secara dinamis kita harus menetapkan listenatau listenGlobalke variabel yang akan menahan fungsi dikembalikan, dan kemudian kita jalankan.
// 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();
}
Berikut ini adalah plnkr dengan contoh yang berfungsi. Contoh tersebut berisi penggunaan listendan listenGlobal.
Menggunakan RendererV2 dengan Angular 4.0.0-rc.1 + (Renderer2 sejak 4.0.0-rc.3)
25/02/2017 : Renderertelah ditinggalkan, sekarang kita harus menggunakan RendererV2(lihat baris di bawah). Lihat komit .
10/03/2017 : RendererV2diubah namanya menjadi Renderer2. Lihat perubahan yang melanggar .
RendererV2tidak memiliki listenGlobalfungsi lagi untuk acara global (dokumen, badan, jendela). Ini hanya memiliki listenfungsi yang mencapai kedua fungsi.
Untuk referensi, saya menyalin & menempelkan kode sumber implementasi DOM Renderer karena mungkin berubah (ya, itu sudut!).
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;
}
Seperti yang Anda lihat, sekarang memverifikasi jika kita melewati sebuah string (dokumen, badan atau jendela), dalam hal ini akan menggunakan addGlobalEventListenerfungsi internal . Dalam kasus lain, ketika kita melewati elemen (nativeElement) itu akan menggunakan yang sederhanaaddEventListener
Untuk menghapus pendengar itu sama dengan Rendererdi sudut 2.x. listenmengembalikan fungsi, lalu memanggil fungsi itu.
Contoh
// 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 dengan Angular 4.0.0-rc.1 menggunakan RendererV2
plnkr dengan Angular 4.0.0-rc.3 menggunakan Renderer2