Renderer telah ditinggalkan dalam Angular 4.0.0-rc.1, baca pembaruan di bawah ini
Cara angular2 adalah menggunakan listen
atau listenGlobal
dari 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 listenGlobal
yang akan memberikan Anda akses ke document
, body
, dll
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Perhatikan bahwa sejak beta.2 keduanya listen
dan listenGlobal
mengembalikan 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 listen
atau listenGlobal
ke 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 listen
dan listenGlobal
.
Menggunakan RendererV2 dengan Angular 4.0.0-rc.1 + (Renderer2 sejak 4.0.0-rc.3)
25/02/2017 : Renderer
telah ditinggalkan, sekarang kita harus menggunakan RendererV2
(lihat baris di bawah). Lihat komit .
10/03/2017 : RendererV2
diubah namanya menjadi Renderer2
. Lihat perubahan yang melanggar .
RendererV2
tidak memiliki listenGlobal
fungsi lagi untuk acara global (dokumen, badan, jendela). Ini hanya memiliki listen
fungsi 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 addGlobalEventListener
fungsi internal . Dalam kasus lain, ketika kita melewati elemen (nativeElement) itu akan menggunakan yang sederhanaaddEventListener
Untuk menghapus pendengar itu sama dengan Renderer
di sudut 2.x. listen
mengembalikan 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