Communication between components:
*Not-related Components
The only way if your components does not have a parent-child relationship (or are related but too further such as a grand grand grand son) is to have some kind of a signal that one component subscribes to, and the other writes into.
Those are the 2 basic operations of any event system: subscribe/listen to an event to be notify, and send/trigger/publish/dispatch a event to notify the ones who wants.
There are at least 3 patterns to do that. You can find a comparison here.
Here is a brief summary:
otherObject.addEventListener('click', () => { alert('click!'); });
this.dispatchEvent('click');
globalBroadcaster.subscribe('click', () => { alert('click!'); });
globalBroadcaster.publish('click');
otherObject.clicked.add( () => { alert('click'); });
this.clicked.dispatch();