In order for a service in Angular 2+ to be properly injected, it needs to be provided to either the component, the parent module or the app module. A service provided in the app module will have the same instance provided everywhere. Here’s an example of two services provided in a component:
Component: app.component.ts
import { Component } from '@angular/core';
import { WeatherApiService } from './weather-api.service';
import { AuthService } from './auth.service';
@Component({
...,
providers: [WeatherApiService, AuthService]
})
export class AppComponent {
constructor(public weatherApi: WeatherApiService,
public auth: AuthService) {}
And here they are provided in the module instead:
Module: app.module.ts
...
import { WeatherApiService } from './weather-api.service';
import { AuthService } from './auth.service';
By default Angular will inject a provider with the same class name and token, but useClass allows to use a different class. For example, the following will provide a service with the Auth token, but the UserAuth class:
providers: [{ provide: Auth, useClass: UserAuth }]
If you want to alias an old provider to be handled by a new provider, you can do so with useExisting. This would be useful if, for example, a component needs to be still be using the old provider, but the logic should still be handled by the new provider:
providers: [{ provide: OldService, useExisting: NewService }]
Most of the time classes are used as providers, but simple values can also be used instead with useValue:
const AUTH_CONFIG = {
apiKey: "...",
authDomain: "..."
};
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
Alligator.io is a developer-focused resource that offers tutorials and insights on a wide range of modern front-end technologies, including Angular 2+, Vue.js, React, TypeScript, Ionic, and JavaScript.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.
Full documentation for every DigitalOcean product.
The Wave has everything you need to know about building a business, from raising funding to marketing your product.
Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.
New accounts only. By submitting your email you agree to our Privacy Policy
Scale up as you grow — whether you're running one virtual machine or ten thousand.
Sign up and get $200 in credit for your first 60 days with DigitalOcean.*
*This promotional offer applies to new accounts only.