如何使用类ComponentRef <c>的destroy()方法

时间:2017-08-03 03:52:19

标签: angular

我正在尝试使用 ComponentRef类来销毁组件,方法是将其作为 private compRef:ComponentRef

注入构造函数中

它给出错误:未捕获(在承诺中):错误:没有ComponentRef的提供者!

尝试在组件级别的provider数组和app.module中包含ComponentRef,但是它表示类型ComponentRef不能分配给“Providers”类型。

有关如何实现ComponentRef以便能够使用destroy()方法的任何帮助吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

可以在动态创建的组件上调用

destroy()方法。这是一个简单的例子:

export class SampleComponent implements AfterViewInit {
    @ViewChild("vc", {read: ViewContainerRef}) vc: ViewContainerRef;

    constructor(private resolver: ComponentFactoryResolver) {}

    ngAfterViewInit() {
        const componentFactory = this.resolver.resolveComponentFactory(BComponent)
        const componentRef = this.vc.createComponent(componentFactory);
        componentRef.destroy(); <-------------------
    }
}

如果组件的componentRef未动态创建,则无法访问

  

我需要清除与之相关的所有属性和对象   成分

destroy方法实际上并未清除组件实例上的任何属性。它只是将视图与视图容器或applicationRef分离,分离投影视图并更新视图组件的状态。它还会在子组件和嵌入视图上触发destroy,这些视图执行相同的操作集。

阅读这些文章以获取更多信息: