Looks like shared services is the best practice to solve many situations such as communication among components or as replacement of the old $rootscope concept of angular 1.
In addition to your requirement and its solution, you can consider using Facade + Shared Services. I have a small project here: https://github.com/cmandamiento/angular-architecture-base