如何销毁父组件中的子组件

时间:2018-10-11 03:47:28

标签: javascript angular typescript

我正在使用Angular 2 +

父级组件

searchResultComponent

此组件显示产品列表作为搜索结果。

template .html:

<div [routerLink]="['product/'+item.id]" ></div>
<!--When user click this DOM, the child component(ProductDetailComponent) will be loaded and navigated..  -->

<router-outlet></router-outlet>

子组件

ProductDetailComponent

我想要做的是当用户单击div时,如果加载了现有的子组件,则将销毁现有的子组件,并可以重新创建新的子组件。

角度问题:路由器仅在导航到其他路线时销毁并重新创建组件。 如果仅更新路由参数或查询参数,但路由相同,则不会销毁并重新创建组件。要解决此问题,这是解决方案。 Router Navigate does not call ngOnInit when same page。但是解决方案不能完全解决问题,几乎没有错误。

activeRouter.params.subscribe(val=>{
   //move the code from ngOnInit to here

})

How to call ngOnInit() again in angular2

我的问题是,当用户单击父组件中的按钮时,如何在重新加载子组件之前完全销毁子组件?

  • 到目前为止,我在父组件中尝试过的操作如下,但是 总是得到类型错误:this.component是未定义的。因为子组件仅在路线更改时加载。

    component:ComponentRef;

    checkingChildCom(){

       if(this.component){
           this.component.destroy();
       }
    

    }

2 个答案:

答案 0 :(得分:0)

经过研究,我发现解决问题的最佳方法是

下标可以观察路线参数的变化,而无需破坏ProductDetailComponent。

private activeRouter: ActivatedRoute,
ngOnInit() {
  this.activeRouter.paramMap.subscribe(param =>{
    //put codes here
  });
}

答案 1 :(得分:-1)

在组件上使用ngIf

<component-selector *ngIf="someCondition"></component-selector>

并在要销毁someCondition时将其设置为false。