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 listen
veya listenGlobal
gelen 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 listenGlobal
size erişim vereceğini document
, body
vb
renderer.listenGlobal('document', 'click', (event) => {
// Do something with 'event'
});
Beta.2 beri de o Not listen
ve 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ı listen
veya listenGlobal
vermeliyiz 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 listen
ve listenGlobal
.
Açısal 4.0.0-rc.1 + ile RendererV2 kullanma (4.0.0-rc.3'ten beri Renderer2)
25/02/2017 : Renderer
kullanımdan kaldırıldı, şimdi kullanmalıyız RendererV2
(aşağıdaki satıra bakın). Taahhüdüne bakın .
10/03/2017 : RendererV2
olarak yeniden adlandırıldı Renderer2
. Değişikliklere bakınız .
RendererV2
artık listenGlobal
global etkinlikler (belge, gövde, pencere) için bir işlevi yoktur . Sadece listen
her 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 addGlobalEventListener
işlev kullanır. Başka bir durumda, bir öğeyi (nativeElement) geçirdiğimizde, basit biraddEventListener
Dinleyiciyi kaldırmak için Renderer
açısal 2.x ile aynıdır . listen
bir 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