我正在尝试从父ts文件调用子组件,但是我无法进行调用。出现错误无法读取未定义的属性'doSomething'。
export class AddComponent implements OnInit, OnDestroy {
public doSomething()
{
alert("Called");
}
}
父代码:
@ViewChild(AddComponent) child:AddComponent;
ngAfterViewInit() {
this.child.doSomething();
}
父html文件
<span class="glyphicon glyphicon-plus addBack" title="Add new booking" (click)=" openActionModal(GridActions, $event, null, 'add')"
style="float: right;margin-right: 10px;margin-top: 18px;"></span>
<ng-template #GridActions>
<div class="modal-header">
<button type="button" class="close pull-right" aria-label="Close" (click)="openConfirmationModal(EditConfirmation)">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<app-add #child *ngIf="showModalAdd"> </app-add>
</div>
</ng-template>
答案 0 :(得分:0)
您可以使用@ViewChild
@Component({
selector: 'child-cmp',
template: '<p>child</p>'
})
class ChildCmp {
doSomething() {}
}
@Component({
selector: 'some-cmp',
template: '<child-cmp></child-cmp>',
directives: [ChildCmp]
})
class SomeCmp {
@ViewChild(ChildCmp) child:ChildCmp;
ngAfterViewInit() {
// child is set
this.child.doSomething();
}
}
使用字符串选择器
@Component({
selector: 'child-cmp',
template: '<p>child</p>'
})
class ChildCmp {
doSomething() {}
}
@Component({
selector: 'some-cmp',
template: '<child-cmp #child></child-cmp>',
directives: [ChildCmp]
})
class SomeCmp {
@ViewChild('child') child:ChildCmp;
ngAfterViewInit() {
// child is set
this.child.doSomething();
}
}
希望这会有所帮助
答案 1 :(得分:0)
我相信您忘记在父模板文件中添加子组件选择器。
parent.component.html
<add-component></add-component>
parent.component.ts
@ViewChild(AddComponent) child:AddComponent;
ngAfterViewInit() {
this.child.doSomething();
}
add.component.ts
export class AddComponent implements OnInit, OnDestroy {
public doSomething()
{
alert("Called");
}
}
希望这可以解决您的问题!
答案 2 :(得分:-1)
您是否在HTML /模板中进行引用?您需要进行模板引用才能调用ViewChild-
让我们,您的AddComponent的选择器是add-component。因此,请在HTML / template-
中像下面这样<add-component #child></add-component>