Dependency Injection in Angular


While this tutorial has content that we believe is of great benefit to our community, we have not yet tested or edited it to ensure you have an error-free learning experience. It's on our list, and we're working on it! You can help us out by using the "report an issue" button at the bottom of the tutorial.

Dependency Injection (DI) is a core concept of Angular 2+ and allows a class receive dependencies from another class. Most of the time in Angular, dependency injection is done by injecting a service class into a component or module class.

Here’s for example how you would define an injectable service. Pay special attention to the highlighted parts:

Service: popcorn.service.ts

import { Injectable } from '@angular/core';

export class PopcornService {
  constructor() {
    console.log("Popcorn has been injected!");
  cookPopcorn(qty) {
    console.log(qty, "bags of popcorn cooked!");

And here’s how you would inject our Popcorn service it in a component:

Component: app.component.ts

import { Component } from '@angular/core';
import { PopcornService } from './popcorn.service';

  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [PopcornService]
export class AppComponent {
  constructor(private popcorn: PopcornService) {}
  cookIt(qty) {

The cookIt() method in the template calls the cookPopcorn() method in the injected service. Let’s make use of our cookIt() method in our template:

Template: app.component.html

<input type="number" #qty placeholder="How many bags?">
<button type="button" (click)="cookIt(qty.value)">
  Cook it!


Creative Commons License