What are various ways of data sharing between components in Angular?

There are basically 3 types of communication that we might need to perform.

  1. Parent Component to Child Component
  2. Child Component to Parent Component
  3. Unrelated Components i.e. Sibling, Grand Parent, Grand Children etc.