web-dev-qa-db-fra.com

Le composant peut-il invoquer un événement d'auto-destruction

J'ai un composant parent qui ouvre un nouveau composant en cliquant sur un lien, ce nouveau composant est censé avoir un bouton de fermeture qui, à la fermeture, envoie un message de fermeture au parent et se détruit.

Nous pouvons envoyer le message de fermeture en utilisant la méthode ngOnDestroy, mais comment invoquer la destruction du composant enfant.

<parent>
    <child></child> //child to be opened on click but close 
                    //event should be inside the child componenet
</parent>

Corrigez-moi si j'ai une erreur conceptuelle ici. Merci

17
Sumit Agarwal

Si vous ajoutez un composant à l'aide de ViewContainerRef.createComponent() comme indiqué dans Angular 2 onglets dynamiques avec les composants choisis par l'utilisateur , alors le composant peut se détruire lui-même lorsque vous passez cmpRef à le composant créé.

Sinon, je ne pense pas qu'il y ait un moyen. Vous pouvez transmettre une valeur au parent afin qu'un *ngIf supprime le composant.

<child *ngIf="showChild" (close)="showChild = false"></child>
class ParentComponent {
  showChild:boolean = true;
}
class ChildComponent {
  @Output() close = new EventEmitter();

  onClose() {
    this.close.emit(null);
  }
}
27
Günter Zöchbauer

Pas sûr de la propreté d'une telle solution, mais j'ai utilisé:

this.viewContainerRef
    .element
    .nativeElement
    .parentElement
    .removeChild(this.viewContainerRef.element.nativeElement);
12
Sergiu Cosciug