Sometimes you need to inject a simple value into multiple components
To inject a simple value you have to pass an object to the providers array of your NgModule
decorator.
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [
{
provide: "language",
useValue: "en"
}
],
bootstrap: [AppComponent]
})
And in your components import Inject
decorator:
@Inject()
is a decorator relevant for DI and helps you manually inject a value into your components.
import { Component, Inject } from "@angular/core";
....
export class AppComponent {
constructor(@Inject("language") private language) {
console.log(this.language);
}
}
You can also use @Inject()
decorator to provide services from your module.
Ex:
import { Component, Inject } from "@angular/core";
import { AppService } from "./app.service";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent {
constructor(
@Inject("language") private language,
@Inject(AppService) private appSer,
private appSer2: AppService
) {
console.log(this.language, this.appSer, this.appSer2);
}
}
Using:
...
@Inject(AppService) private appSer,
private appSer2: AppService
...
Above code illustrates 2 ways of injecting a service into your component.
Hope you find it useful and see you on the next post!
Stay safe!
Top comments (2)
Hi Daniel! I don't understand. Why would you want to inject services this way when they can be provided in Root and initialised in the constructor?
@Hi AlleAmiDev sorry, but maybe I wasn't enough clear about it.
You are right, using
@Inject()
it's not a desired way to inject services into your components, but that was just an example.You should use
@Inject('value')
when you need to inject just a specific value and not a whole instance.For ex:
and then in your components:
Did I answer your question? :-)