Предположим, что у вас есть этот шаблон (для родительского компонента)
<button ... (click)="Save()">
...
<ngb-tabset [activeId]="selectedTab" #tabs>
<ngb-tab id="tab1">
<template ngbTabTitle>tab1</template>
<template ngbTabContent>
<child-comp1 #comp1>
</child-comp1>
</template>
</ngb-tab>
<ngb-tab id="tab2">
<template ngbTabTitle>tab2</template>
<template ngbTabContent>
<child-comp2 #comp2>
</child-comp2>
</template>
</ngb-tab>
...
</ngb-tabset>
И внутри каждого дочернего компонента (child-comp1...) у меня есть форма и входные данные с некоторыми проверками.
Как я могу получить доступ к методу дочернего компонента из родительского компонента по запросу, я имею в виду что-то вроде этого:
Save(){
if(Validate()){
//Save an object ...
}
}
Validate(){
if(!this.comp1.Validate()){
// Activate tab1
return false;
}
else if(!this.comp2.Validate()){
// Activate tab2
return false;
}
//...
return true;
}
В родительском компоненте у меня есть:
// imports ...
@Component({ ... })
export class parent implements OnInit {
@ViewChild(ChildComp) comp1: ChildComp;
@ViewChild('comp2') comp2;
@ViewChild('tabs') tabs;
...
Validate(){...}
Save(){...}
}
comp1
и comp2
всегда undefined
в методе проверки!
tabs
вернуть объект, но я не смог найти способ добраться до дочернего компонента!
ngAfterViewInit()
?@ViewChild()
еще не назначено в конструкторе. Также был бы полезен еще один код. Где находится@ViewChild(....)
и связанный с ним код. Где HTML показан в вашем вопросе? - person Günter Zöchbauer   schedule 06.09.2016Validate()
после нажатия кнопки. - person A.Akram   schedule 06.09.2016