2016-07-30 15 views
6

Ja zaczynając Kątowymi 2, Mam komponent dziecko „ChildCmp” zainicjowany i po Muszę zniszczyć komponent poprzez kliknięcie, powiedzmy:kątowa 2 - zniszczyć składnik podrzędny

@Component({ 
selector: 'main-cmp', 
templateUrl: './main-cmp.html', 
directives: [ChildCmp] 
}) 
class MainCmp { 
    @ViewChild(ChildCmp) 
    childCmp: ChildCmp; 
    destroyChildClick(){ 
     this.childCmp.destroy(); 
    } 
} 

ale poprzedni kod nie robi „t run, zniszczyć() jest nieokreślone i wyjątkiem jest:

TypeError: this.childCmp.destroy is not a function

Czytałem this thread i nie używasz ViewContainerRef.createComponent(), składnik ten jest tworzony z instancją "ComponentRef", ale childCmp nie ma implementacji "ComponentRef".

Jak mogę wdrożyć lub wprowadzić metodę niszczenia?

Dzięki za wszystko!

+0

pokazać, gdzie iw jaki sposób można utworzyć komponent? – micronyks

+4

Po co niszczyć, skoro można po prostu '* ngIf'? – Harangue

+0

@Hangangue Byłem tworzenie komponentów dynamicznie przy użyciu ViewContainerRef.createComponent(), inne są tworzone z szablonu, dlatego wymagam jednego formularza do zniszczenia. – Alexander

Odpowiedz

4

Spróbuj

export class MainCmp { 

    @ViewChild(ChildCmp) childRef: ChildCmp; 

    destroyClick() { 

     if (this.childRef) { 
     this.childRef.destroy(); 
     } 
    } 
} 
+1

to nie ma sensu. –

+0

Nie sądzę, że to odpowiada na pytanie OP. Co tu jest napisane, nie ma dla mnie sensu. Komponenty potomne są niszczone, gdy rodzic zostaje zniszczony. Niezależnie od tego, czy 'this.childRef.destroy()' działa czy też nie, w zasadzie wołasz o to, aby dziecko zostało zniszczone, zanim i tak zostanie ono zniszczone. – freethebees

+0

@freethebees Żadne ciało nie powiedziało, że musisz zniszczyć dziecko ręcznie, ale można chcieć zniszczyć dziecko w tak wielu różnych przypadkach użycia. Co jeśli chcesz zatrzymać rodzica i zniszczyć dziecko? –

Powiązane problemy