通过ComponentFactory动态创建组件时,返回的ComponentRef提供了一个完美实现我想要完成的destroy方法。考虑到这一点,看起来我所需要做的就是获取静态创建组件的ComponentRef,然后使用它的destroy函数(this answer中所述),但是当我尝试这样做时,我会收到一个错误,即“destroy不是一个函数”,尽管我确实得到了一个对象。
这是在这里触发的:
调用这个“destroy”方法对于我动态创建的组件有效,但对于静态创建的组件无效。
编辑:因此,似乎这部分删除了组件,但未从DOM中删除,这与在动态创建的组件上调用“destroy”时发生的行为不同。此外,当我单击尝试销毁的组件时,我的单击事件函数仍然会触发。
编辑2:我更新了我的ViewChild语法,明确地读取ComponentRef,但返回“undefined”:
如果返回值为“undefined”,那么我猜可能不可能实现。
这是我在ViewChild中使用的语法:
@ViewChild(MyComponent) myComponentRef: ComponentRef<MyComponent>;
我的“destroy”调用:
private destroy() {
this.myComponentRef.destroy();
}
这是在这里触发的:
<button (click)="destroy()">Destroy</button>
调用这个“destroy”方法对于我动态创建的组件有效,但对于静态创建的组件无效。
编辑:因此,似乎这部分删除了组件,但未从DOM中删除,这与在动态创建的组件上调用“destroy”时发生的行为不同。此外,当我单击尝试销毁的组件时,我的单击事件函数仍然会触发。
编辑2:我更新了我的ViewChild语法,明确地读取ComponentRef,但返回“undefined”:
@ViewChild(MyComponent, {read: ComponentRef}) myComponentRef: ComponentRef<MyComponent>;
如果返回值为“undefined”,那么我猜可能不可能实现。