I am getting an error when I try to call a childComponent method from the Parent
**Child TS. **
export class ChildComponent implements OnInit {
ChildMethod(){
console.log('test');
}
constructor() { }
}
**Parent Ts **
@ViewChild(ChildComponent , {static : false}) child!:ChildComponent ;
CallChild(){
this.child.ChildMethod();
}
when I call CallChild I get this error Cannot read properties of undefined (reading 'ChildMethod') at GpmainComponent.CallChild (gpmain.component.ts:39:16)
CodePudding user response:
Try to declare your Child component in constructor.
in Parent.ts:
constructor(private child: ChildComponent) {}
CallChild() {
this.child.ChildMethod();
}
CodePudding user response:
It could possibly depend on when you are calling CallChild.
If you're calling it before the view has been rendered, then this.child will be undefined, thus causing the error
CodePudding user response:
This is related to static: false and timing.
When set to false, the ViewChild query will be resolved after change detection runs and right before ngAfterViewInit. This means that if you attempt to call in in ngOnInit for example then child will be undefined.
You have 2 options:
- Try calling it later, after change detection runs and when it's initialized
- Set
static: trueif the child is not under an*ngIfand then it will be resolved sooner and available inngOnInit
