angular - 当 Angular 指令创建元素时,是否有必要在 ngOnDestroy 中删除这些元素
问题描述
当 Angular 指令使用 renderer2 创建元素时,是否有必要在指令/主机被销毁时删除这些元素。
@Directive({
selector: '[myDirective]'
})
...
constructor(private renderer: Renderer2,private hostElement: ElementRef){}
...
const ele = this.hostElement.nativeElement;
const span = this.renderer.createElement('span');
this.renderer.appendChild(ele, span);
...
因为我使用的是renderer2,所以在没有我干预的情况下,我是否应该在后台处理所有这些,或者我应该添加对元素的引用并手动销毁它:
...
mySpan: HTMLElement;
constructor(private renderer: Renderer2,private hostElement: ElementRef){}
...
const ele = this.hostElement.nativeElement;
this.mySpan = this.renderer.createElement('span');
this.renderer.appendChild(ele, span);
...
//is this required?
ngOnDestroy() {
if(this.mySpan){
this.renderer.removeChild(this.hostElement.nativeElement, this.mySpan);
}
}
解决方案
正如@Indraraj26 提到的,没有必要删除从属性指令创建的孩子。您的主机组件将负责这一点。
在 - 方法中您需要注意的ngOnDestroy
是(如果适用):
- 从 DOM 中移除监听器
- 取消订阅 Observables
(可能还有一些情况,我现在想不出)
推荐阅读
- c# - 如何在不使用 JS 的情况下打开新窗口
- javascript - 在 RabbitMQ 队列上发布的模块导出功能
- windows - 如何使用 NSIS 将程序添加到“打开方式”菜单
- jenkins - 在主动选择反应参数中参考主动选择参数返回值
- ansible - 如何循环遍历不同的 Clodformation 模板?
- sql - 将“nvarchar”列数据类型转换为“DateTime”
- excel - Excel:按列查找和排序匹配项
- vb.net - Visual Basic Threading.Thread 无法按我的意愿工作,我的代码有什么问题?
- html - 有没有办法避免为不同的锚标签()重复鼠标悬停/鼠标悬停功能,这些锚标签在悬停时会产生相同的视觉效果?
- mysql - 带有更新文件的 MySQL LOAD DATA