Angular-Loiane-Training

Este repositorio contem exemplos documentados e descricoes dos conteudos estudados ao longo do curso de Angular da Loiane

View project on GitHub

Services com Injecao de Dependencia

Dependencia

rotomando o conceito de depencendia, neste caso dependencia de classes, quando uma classe A precisa de uma instancia de outra classe B para funcionar corretamente, logo a classe A possui dependencia da classe B.


figura 1 - dependencia entre classes.

#

Injecao de dependencia (DI, Dependency Injection)

A injecao de dependencia ira criar uma instancia da classe B na classe A automaticamente, nao sendo necessaria instanciar explicitamente no codigo.


figura 2 - Injecao de dependencia

Existem 3 formas de realizar a injecao de dependencia, para mais detalhes consulte introducao a injecao de dependencia.

no Angular 2 a injecao de dependencia e feita por meio de construtor, para exemplificar iremos utilizar o exemplo feito em criacao do primeiro service. O angular possui o decorator “@Injectable()” que possibilita criar uma instancia automatica por meio de construtor em outras classes (Injetar dependencia).

import { Injectable } from '@angular/core'

@Injectable()
export class PrimeiroService {

    constructor(){

    }

    getCursos(){
        return ['angular 2', 'Java', 'NodeJs']
    }
}

Vamos injetar a dependencia na classe CursosComponent

import { Component, OnInit } from '@angular/core';

import { PrimeiroService } from '../../primeiro-service/primeiro-service.service';

@Component({
  selector: 'cursos',
  templateUrl: './cursos.component.html',
  styleUrls: ['./cursos.component.css']
})
export class CursosComponent implemWents OnInit {

  cursos: string[] = []
  cursosService: PrimeiroService

  constructor(primeiroService: PrimeiroService) { 
    this.cursosService = primeiroService 
  }

  ngOnInit(): void {
    this.cursos = this.cursosService.getCursos()
  }

}

note que mantivemos a estrutura do exemplo sem injecao de dependencia, alterando apenas a atribuicao onde a variavel cursosService recebe o valor de primeiroService (Objeto Injetado Automaticamente). Entretando podemos utilizar o objeto injetado diretamente na classe, basta adicionar o modificador de acesso private para que a inteligencia do angular entenda que este e um atributo interno da classe.

import { Component, OnInit } from '@angular/core';

import { PrimeiroService } from '../../primeiro-service/primeiro-service.service';

@Component({
  selector: 'cursos',
  templateUrl: './cursos.component.html',
  styleUrls: ['./cursos.component.css']
})
export class CursosComponent implements OnInit {

  cursos: string[] = []

  constructor(private cursosService: PrimeiroService) { }

  ngOnInit(): void {
    this.cursos = this.cursosService.getCursos()
  }

}