Angular 组件能否调用自销毁事件

Angular 组件能否调用自销毁事件,angular,angular2-components,Angular,Angular2 Components,我有一个父组件,它在点击一个链接时打开一个新组件,这个新组件应该有一个关闭按钮,它在关闭时向父组件发送一个关闭消息并销毁它自己 我们可以使用ngondestory方法发送结束消息,但是如何调用子组件的销毁 //要在单击时打开但关闭的子级 //事件应该在子组件内 如果我有一些概念上的错误,请纠正我。谢谢如果您使用中所示的ViewContainerRef.createComponent()添加组件,那么当您将cmpRef传递到所创建的组件时,该组件可能会自行销毁 否则我认为没有办法。您可以将值传

我有一个父组件,它在点击一个链接时打开一个新组件,这个新组件应该有一个关闭按钮,它在关闭时向父组件发送一个关闭消息并销毁它自己

我们可以使用
ngondestory
方法发送结束消息,但是如何调用子组件的销毁


//要在单击时打开但关闭的子级
//事件应该在子组件内

如果我有一些概念上的错误,请纠正我。谢谢

如果您使用中所示的
ViewContainerRef.createComponent()
添加组件,那么当您将
cmpRef
传递到所创建的组件时,该组件可能会自行销毁

否则我认为没有办法。您可以将值传递给父级,以便
*ngIf
删除该组件


类父组件{
showChild:boolean=true;
}
类子组件{
@Output()close=neweventemitter();
onClose(){
this.close.emit(null);
}
}

不确定这种溶液的清洁度,但我使用了:

this.viewContainerRef
    .element
    .nativeElement
    .parentElement
    .removeChild(this.viewContainerRef.element.nativeElement);

这里有另一种方法。这从组件本身内部起作用;无需与外部组件通信

// imports
export class SelfDestroyableComponent implements OnInit {
    // other code

    constructor(private host: ElementRef<HTMLElement>) {}

    // whatEver function name you want to give 
    onCloseClicked() {
        this.host.nativeElement.remove();
    }

    // other code
}
//导入
导出类SelfDestroyableComponent实现OnInit{
//其他代码
构造函数(私有主机:ElementRef){}
//不管你想给什么函数名
onCloseClicked(){
this.host.nativeElement.remove();
}
//其他代码
}

这是一个很好的解决方案,几天前我也需要类似的解决方案,我也是这么做的。不要认为现在有更好的方法来实现这一点。@Günter Zöchbauer您能演示如何在子组件的打字脚本中使用“close”吗?我们将如何触发关闭事件?感谢您的回答无论如何,为angular 1这样做?这不是这个问题的答案。这是一个让父级知道何时删除它的组件。当删除发生时,它在父作用域中。。。这不是用户所要求的自我毁灭(我来这里是为了什么)。这有点奇怪,但确实有效,似乎比公认的答案更合适。给viewContainerRef分配什么?这正是我所需要的。我需要“自毁”点击一个在*ngComponentOutlet中实例化的组件,这就成功了!如果导入
ElementRef
,则可以在
AfterViewInit
生命周期期间执行以下操作:
this.element.nativeElement.parentNode.removeChild(this.element.nativeElement)它会让它消失,但是ngOnDestroy钩子没有被调用,所以不正确。它对我有效,但我不知道这是否是最好的practice@ThPadelis我不确定这是否是最好的做法,但我不知道有任何缺点。你知道这会在哪里产生问题吗?这个解决方案有什么缺点吗?我想用它(没有找到更好的):@JoeAllen我一直在用它。我还没有面对任何挑战。如果需要的话,它不会叫“Ngondestry”。而且,如果一个侦听器以“HostListener”开头,它也不会被删除。没有自动“退订”。