providedIn: 'root' is the easiest and most efficient way to provide services since Angular 6:
- The service will be available application wide as a singleton with no need to add it to a module’s providers array (like Angular <= 5).
- If the service is only used within a lazy loaded module it will be lazy loaded with that module
- If it is never used it will not be contained in the build (tree shaked).
For further informations consider reading the documentation and NgModule FAQs
Btw:
- If you don’t want a application-wide singleton use the provider’s array of a component instead.
- If you want to limit the scope so no other developer will ever use your service outside of a particular module, use the
providersarray of NgModule instead.