@Inject() and @Injectable

Angular

08/01/2018

Qual a diferença entre @Inject() and @Injectable no angular2?
Marcio

Marcio

Curtidas 0

Melhor post

William Finco

William Finco

08/01/2018

Olá Márcio,

O decorador @Inject() é um mecanismo geralmente utilizado no construtor de uma classe que permite especificar que o parâmetro inserido deve ser injetado.

Exemplo:

import {Component, Inject} from '@angular/core';
import { SuaClasse } from '../components/suaclasse';

export class AppComponent{
            constructor(@Inject(SuaClasse) private suaClasse ){   }
}



O @Injectable() faz o Angular ter o conhecimento que uma classe pode ser usada com a injeção de dependência:

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

@Injectable()
export class SuaClasse(){
 
}


Quando lidamos com o TypeScript no Angular, geralmente com a Injeção de Dependência eu costumo suprimir o uso do @Inject e faço assim:

import  from '@angular/core';
import { SuaClasse } from '../components/suaclasse';

export class AppComponent{
            constructor(SuaClasse suaclasse){  
            this.suaclasse = suaclasse;
 }
}


Lembrando que a SuaClasse deve estar com o decorador @Injectable(), caso contrário o engine do angular retornará uma excessão.

Abs
GOSTEI 1

Mais Respostas

Kelvin Andrade

Kelvin Andrade

08/01/2018

Olá,

Muito boa a sua explicação João! Só não podemos esquecer de definir a minha classe em providers do meu módulo!

import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { SuaClasse } from '../components/suaclasse';
 
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [SuaClasse], //Providers são definidos aqui
  bootstrap: [AppComponent]
})
export class AppModule { }



E podemos omitir o código "this.suaclasse = suaclasse", por exemplo:
import  from '@angular/core';
import { SuaClasse } from '../components/suaclasse';
 
export class AppComponent{
            constructor(SuaClasse suaclasse){ }
}
GOSTEI 0
POSTAR