Interaction between components can be indeed achieved using services. You will need to inject the service use for inter-component communication into all the components which will need to use it (all the caller components and the callee method) and make use of the properties of Observables.
The shared service can look something like this:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class CommunicationService {
// Observable string sources
private componentMethodCallSource = new Subject<any>();
// Observable string streams
componentMethodCalled$ = this.componentMethodCallSource.asObservable();
// Service message commands
callComponentMethod() {
this.componentMethodCallSource.next();
}
}
Example:
Sender:
callMethod = function () {
this.communicationService.callComponentMethod();
}
Receiver:
this.communicationService.componentMethodCalled$.subscribe(() => {
alert('(Component2) Method called!');
});
I have created a basic example here, where clicking on a button from Component1 will call a method from Component2.
If you want to read more on the subject, please refer to the dedicated documentation section: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…