Speaking about Angular 2+ here:
Generally services are singletons, especially if you've only declared it as a provider in one place (module or component).
However, Angular does feature a hierarchical injector system meaning each component has its own injector. These injectors can also have parent injectors. When an injector tries to resolve a provider, it will first look in its provider list. If its list defines the provider, the injector will use that one. Otherwise it will recursively traverse back up the injector hierarchy until it finds a reference.
Given that, there can be multiple instances of the same service in your app. For example if you were to declare a provider on a component class, every instance of that component would get its own service.
@Component({
selector: 'my-component',
providers: [MyService]
})
export class My component {
constructor(service: MyService) {
// service is unique for every component
}
}
Generally it's not prudent to declare providers on components. It becomes really difficult to track down bugs when there are multiple instances of a service in play.