问题出现的原因是因为当组件销毁后,它的监听器也同样被销毁了。因此需要在适当的位置取消监听器。
解决方法就是使用 OnDestroy 生命周期钩子函数,在组件被销毁前手动取消组件的监听器。
以下是示例代码:
@Component({ selector: 'app-test', template: '', }) export class TestComponent implements OnInit, OnDestroy { @HostListener('click') onClick() { console.log('Button clicked!'); }
// 取消监听器 ngOnDestroy() { this.renderer2.removeChild(document.body, this.script); } }
这里使用了 HostListener 来添加 click 事件监听器,当组件被销毁时,手动移除监听器即可。
另外需要注意的是,在添加监听器时,如果使用 Renderer2,则在销毁时也应使用 Renderer2 进行移除,以避免出现 memory leaks。