2016-07-30 10 views
6

Я начинаю с угловыми 2, у меня есть ребенок компонент «ChildCmp» инициализируется и после того, как мне нужно уничтожить компонент через клик, скажем:Угловое 2 - уничтожить ребенка компонент

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

но предыдущий код Безразлично «т бежать, уничтожить() не определен и исключение:

TypeError: this.childCmp.destroy is not a function

Я прочитал this thread и там используют ViewContainerRef.createComponent() компонент создается с этим экземпляром «ComponentRef», но childCmp не имеет реализации «ComponentRef».

Как я могу реализовать или ввести метод уничтожения?

Спасибо за все!

+0

шоу, где и как вы создаете компонент? – micronyks

+4

Зачем уничтожать, когда вы можете просто '* ngIf'? – Harangue

+0

@Harangue У меня было динамическое создание компонентов с помощью ViewContainerRef.createComponent(), другие создаются из шаблона, поэтому мне требуется уничтожить одну единственную форму. – Alexander

ответ

4

Попробуйте

export class MainCmp { 

    @ViewChild(ChildCmp) childRef: ChildCmp; 

    destroyClick() { 

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

это не имеет смысла. –

+0

Я не думаю, что это отвечает на вопрос ОП. Кроме того, то, что здесь написано, не имеет смысла для меня. Детальные компоненты уничтожаются, когда родитель уничтожается в любом случае. Независимо от того, работает ли это 'this.childRef.destroy()' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – freethebees

+0

@freethebees Ни одно тело не говорит, что вам нужно уничтожить ребенка вручную, но можно захотеть уничтожить ребенка для стольких различных случаев использования. Что делать, если вы хотите сохранить родителя и уничтожить ребенка? –

Смежные вопросы