Angular global olay hedefi olarak yalnızca üç string değeri tanır: 'window', 'document' ve 'body'. Global bir olay dinleyicisi kaydederken string hedef olarak bunlardan başka bir şey geçirirseniz, Angular bunu çözümleyemez ve bu hatayı fırlatır.
Hatayı ayıklama
@HostListener veya Renderer2.listen() ile kullanılan hedef adında bir yazım hatası olup olmadığını kontrol edin. 'window' yerine 'windw' gibi küçük bir hata bunu tetiklemeye yeter:
@Component({
selector: 'app-example',
template: '<button>Click me</button>',
})
export class Example {
@HostListener('windw:resize') // yazım hatası — 'window' olmalı
onResize() {}
}
Aynı durum, Angular'ın bilmediği bir string ile Renderer2.listen()'i doğrudan çağırdığınızda da geçerlidir:
this.renderer.listen('global', 'click', handler); // 'global' desteklenmiyor
Hatayı düzeltme
Hedefi desteklenen üç stringden birine düzeltin veya string yerine gerçek bir DOM öğesi geçirin:
@Component({
selector: 'app-example',
template: '<button>Click me</button>',
})
export class Example {
@HostListener('window:resize')
onResize() {}
}
// Daha belirli bir şeyi hedeflemeniz gerektiğinde bir öğe referansı kullanın
this.renderer.listen(this.elementRef.nativeElement, 'click', handler);