angular2 call function of parent component
Below is the code that worked for me in the latest
Angular 5+
class ChildComponent {
@Output() myEvent = new EventEmitter<string>();
callParent() {
this.myEvent.emit('eventDesc');
}
}
In ParentTemplate
's template
<child-component (myEvent)="anyParentMethod($event)"
Solution without events involved.
Suppose that I have a ChildComponent
and from that I want to call the method myMethod()
which belongs to ParentComponent
(keeping the original parent's context).
Parent Component class:
@Component({ ... })
export class ParentComponent {
get myMethodFunc() {
return this.myMethod.bind(this);
}
myMethod() {
...
}
}
Parent template:
<app-child [myMethod]="myMethodFunc"></app-child>
Child template
@Component({ ... })
export class ChildComponent {
@Input() myMethod: Function;
// here I can use this.myMethod() and it will call ParentComponent's myMethod()
}
I would create a custom event in the child component. Something like this:
@Component({
selector: 'child-comp',
(...)
})
export class ChildComponent {
@Output()
uploaded = new EventEmitter<string>();
uploadComplete() {
this.uploaded.emit('complete');
}
Your parent component could register on this event
@Component({
template `
<child-comp (uploaded)="someMethod($event)"></child-comp>
`,
directives: [ ChildComponent ]
})
export class ParentComponent {
(...)
someMethod(event) {
}
}
Another way would be to inject the parent component in the child one, but they will be strongly linked together...