【发布时间】:2016-09-06 06:08:45
【问题描述】:
假设有这个模板(父组件)
<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 在哪里? -
在点击按钮后的
Validate()方法中。 -
@GünterZöchbauer,我稍微更新了这个问题。我希望现在更清楚了!
标签: angular ng-bootstrap