A bit off topic, but I want to make a correction to some of the answers, stating that services provided in @NgModule are singletons available to the entire scope of the application. You may run into cases, where that is not true.
Services do not live in modules, they live in injectors. At the very top level Angular has the Null Injector, below that is the Platform Injector and below that, sits the Root Injector. Platform and Root are Module injectors. Weather services, provided in modules, are in the root injector, depends if the modules are eagerly loaded, or not. Services provided in eagerly loaded modules are created in the Root Injector, so in those cases, providing the service in an @NgModule, will make the service a singleton in the root injector. For lazily loaded modules however, angular creates more Module injectors (1 injector for every lazily loaded module), which is below the root injector from docs. In that case providing the service in the @NgModule will not give you a singleton service available to the entire scope of the application, but rather a service, which will be available to the children of the lazily loaded module.
To avoid thinking about this (for angular 6+), if you want a singleton for your entire app, you can tell angular, you want the service in your root injector in the service class itself:
@Injectable({
provideIn: 'root'
})
class MyService...
This will ensure the service is available in angular's root injector