你如何让Angular 2组件自行消灭?

时间:2017-04-01 01:26:44

标签: angular components

我正在使用父级中的按钮创建多个下拉菜单组件,但我希望这些组件具有可以自行销毁的按钮。我确信它很简单,但似乎找不到任何可以做到的东西。我知道如何从父母那里摧毁它,但似乎无法从内部去做。谁知道?就在它被销毁之前,我如何向父母发送消息让它知道? (我在父母中有他们的实例,但在父母中还有其他东西需要信号)

我正在使用viewContainerRef.createComponent动态创建它们。模板看起来像这样:

<template item-host></template>

我尝试了@Output并得到了这个:

<template item-host [ERROR ->](destroyCheck)="someMethod($event)"></template>

2 个答案:

答案 0 :(得分:4)

声明输出变量

@Output() destroyCheck:EventEmitter<string>=new EventEmitter<string>();

ngOnDestroy(){

          this.destroyCheck.emit('destroyed');

}

以这种方式处理父组件句柄。

<div>
     <child-comp (destroyCheck)="someMethod($event)"> </child-comp>
</div>

您的方法应该作为

处理
someMethod(something){
  console.log(something);
}

答案 1 :(得分:3)

使用ComponentRef.destroy()

如果使用viewContainerRef.createComponent动态创建组件,则可以使用ComponentRef.destroy()销毁它。您所需要做的就是在组件中查看对自身的引用,例如在示例中:

父母:

...
const componentRef = this.placeholder.createComponent(
  this.resolver.resolveComponentFactory(SOMECOMP));
componentRef.instance.viewRef = componentRef;
...

孩子:

viewRef: ComponentRef<SOMECOMP>;
...
this.viewRef.destroy();
...