2016-07-28 3 views
1

В Angular2, Я хочу найти компоненты моих детей, которые были объявлены в шаблоне во время выполнения. как я могу это сделать? Для примера:Как вызвать ViewChild во время выполнения?

@Component({ 

template: ` 
<cmp1 *ngIf=expression></cmp1> 
<cmp2 *ngIf=!expression></cmp2> 
    ` 

}) 
export class Component3{ 

findChild(){ 
// How to find cmp2 
} 

} 
+0

Пожалуйста, пост код, который показывает, что вы пытаетесь достичь. –

ответ

1

Не уверен, что вы имеете в виду с «во время выполнения», но это, как это обычно делается:

@Component({ 
template: ` 
<cmp1 #cmp *ngIf=expression></cmp1> 
<cmp2 #cmp *ngIf=!expression></cmp2> 
` 
}) 
export class Component3{ 

    @ViewChildren('cmp') cmp:QueryList; 

    findChild(){ 
    return this.cmp.toArray()[0]; 
    } 
} 

Component1 необходимо импортировать.

Смотрите также angular 2/typescript : get hold of an element in the template

+0

обратите внимание, что ngIf, ngIf покажет только один из двух компонентов. Допустим, что выражение = true. cmp1 будет отображаться, cmp2 не будет ... Когда я изменю выражение на false во время выполнения, cmp1 будет удален из DOM, и cmp2 должен быть отображен. В этом случае, как я получу cmp2? – almog

+0

Теперь я понимаю, что вы имеете в виду. Я обновил свой ответ. Лучшим способом может быть использование '@ViewChild()', как было показано выше, и переместить выражение в метод и проверить этот метод в 'findChild' как' if (выражение) {return cmp1; } else {return cmp2;} ' –

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