Oluşturucu, Açısal 4.0.0-rc.1'de kullanımdan kaldırıldı, aşağıdaki güncellemeyi okuyun
Angular2 yolu kullanımına olan listenveya listenGlobalgelen Oluşturucu
Eğer bir bileşen için bir tıklama etkinlik eklemek istiyorsanız Örneğin, kullanmak zorunda Oluşturucu ve ElementRef (bu yanı alır ViewChild kullanma seçeneğini, ya da bir şey verir nativeElement)
constructor(elementRef: ElementRef, renderer: Renderer) {
// Listen to click events in the component
renderer.listen(elementRef.nativeElement, 'click', (event) => {
// Do something with 'event'
})
);
Sen kullanabilirsiniz listenGlobalsize erişim vereceğini document, bodyvb
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Beta.2 beri de o Not listenve listenGlobal(bakınız dinleyici kaldırmak için bir fonksiyon geri değişiklikler kırılma beta.2 için değişiklikler ile ilgili bölümü). Bu, büyük uygulamalarda bellek sızıntılarını önlemek içindir (bkz. # 6686 ).
Dinamik olarak eklediğimiz dinleyiciyi kaldırmak için , döndürülen işlevi tutacak bir değişken atamalı listenveya listenGlobalvermeliyiz ve sonra çalıştırıyoruz.
// 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();
}
İşte bir örnek çalışan bir plnkr . Örnek kullanımını içerir listenve listenGlobal.
Açısal 4.0.0-rc.1 + ile RendererV2 kullanma (4.0.0-rc.3'ten beri Renderer2)
25/02/2017 : Rendererkullanımdan kaldırıldı, şimdi kullanmalıyız RendererV2(aşağıdaki satıra bakın). Taahhüdüne bakın .
10/03/2017 : RendererV2olarak yeniden adlandırıldı Renderer2. Değişikliklere bakınız .
RendererV2artık listenGlobalglobal etkinlikler (belge, gövde, pencere) için bir işlevi yoktur . Sadece listenher iki işlevi de yerine getiren bir işlevi vardır.
Referans olarak, DOM Renderer uygulamasının kaynak kodunu değiştirebildiğimden beri kopyalayıp yapıştırıyorum (evet, açısal!).
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;
}
Gördüğünüz gibi, şimdi bir dize (belge, gövde veya pencere) geçirip geçirmediğimizi doğrular, bu durumda dahili bir addGlobalEventListenerişlev kullanır. Başka bir durumda, bir öğeyi (nativeElement) geçirdiğimizde, basit biraddEventListener
Dinleyiciyi kaldırmak için Rendereraçısal 2.x ile aynıdır . listenbir işlev döndürür, sonra o işlevi çağırır.
Misal
// 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();
RendererV2 kullanarak Angular 4.0.0- rc.1 ile plnkr
Renderer2 kullanarak Angular 4.0.0- rc.3 ile plnkr