To communicate between components, you can either use observables, custom events, or callbacks. Observables are properties that can be subscribed to and updated by different components. For example, you can have a shared observable in the parent component that can be passed as a parameter to the child component, and then the child component can update or read the observable value. Custom events are events that can be triggered and listened to by different components. For example, you can have a custom event in the child component that can be triggered when something happens, and then the parent component can listen to the event and react accordingly. Callbacks are functions that can be passed as parameters to different components, and then the components can invoke the functions when needed. For example, you can have a callback function in the parent component that can be passed as a parameter to the child component, and then the child component can invoke the function to notify the parent component about something.