3
在我们的代码库,我们有一个使用Renderer2创建这样一个div一个虚拟的重复指令:销毁使用Renderer2创建的元素的正确方法是什么?
this.renderer2.createElement('div');
在ngOnDestroy方法,我们正在摧毁它像这样:
this.renderer.destroyNode(this.offsetBeforeEl);
这工作得很好我们没有遇到任何问题,直到我们建立在PROD模式的应用,我们开始收到以下错误:
main.js?d73b003…:formatted:87193 Uncaught (in promise) TypeError: this.renderer.destroyNode is not a function
我添加了一个面包机kpoint到那条线,发现其实destroyNode不是Renderer2上的一个方法。我去了棱角分明的源代码,发现在抽象类确定指标的方法上面的评论:
/**
* This property is allowed to be null/undefined,
* in which case the view engine won't call it.
* This is used as a performance optimization for production mode.
*/
destroyNode: ((node: any) => void)|null;
所以我检查了代码视图,看到这一点:
if (view.renderer.destroyNode) {
destroyViewNodes(view);
}
if (isComponentView(view)) {
view.renderer.destroy();
}
如果我不能依赖此方法存在,那么销毁使用Renderer2动态创建的节点的正确方法是什么?