Basis Tecnologia da Informação S.A. - 2019
A Injeção de Dependência (DI) é uma maneira de criar objetos que dependem de outros objetos. Um sistema de injeção de dependência fornece os objetos dependentes quando cria uma instância de um objeto.
Antes de falar sobre as formas de DI primeiro temos de falar sobre o @Injectable.
O @Injectable() é um decorador essencial em todas as definições de serviço Angular, pois ele determina que o seu serviço poderá ser injetado.
Serviços injetados tem visibilidade no escopo da hierarquia de sua definição, ou seja, um serviço injetor definido no nível da AppModule é compartilhado por todos os aplicativos em execução.

Um provedor de dependência configura um injetor com um token DI, que esse injetor usa para fornecer a versão concreta em tempo de execução de um valor de dependência.
O uso do useClass nos permite modifica o comportamento de uma classe
@Injectable()
export class Servico {
sayHello() {
console.log(`Servico --> Hello`);
}
}
@Injectable()
export class Servico2 {
sayHello() {
console.log(`Servico2 --> Hello World`);
}
}
@NgModule({
providers: [
{provider: Servico, useClass: Servico2}
]
})
export class MyModule { }Com o useFactory, podemos usar uma fábrica em tempo de execução para decidir que tipo de serviço queremos devolver se for solicitado por qualquer outra classe em nossa aplicação.
@Injectable()
export class Servico { }
@Injectable()
export class Servico2 { }
@Injectable()
export class Servico3 { }
export function MyFactory() {
constructor() {
if (...) {
return new Servico2();
}
return new Servico3();
}
}
@NgModule({
providers: [
{provider: Servico, useFactory: MyFactory}
]
})
export class MyModule { }Às vezes é necessário adicionar dependências as fábricas o classes, porque é necessário decidir se deve retornar servicoA ou servicoB. Para isso basta adicioná-las usando a propriedade deps no objeto de configuração.
@Injectable()
export class Servico { }
@Injectable()
export class Servico2 { }
@Injectable()
export class Servico3 { }
export function MyFactory() {
constructor(http: HttpClient) {
//logica com http
if (...) {
return new Servico2();
}
return new Servico3();
}
}
@NgModule({
providers: [
{provider: Servico, useFactory: MyFactory, deps: [HttpClient]}
]
})
export class MyModule { }Nem sempre nossas dependências são classes, podem ocorrer ocasiões as quais sejam necessário a injeção de uma string, função ou objeto, e para isso devemos utilizar o parametro useValue
export const APP_DI_CONFIG: AppConfig = {
apiEndpoint: 'api.application.com',
title: 'Dependency Injection'
};
@NgModule({
providers: [
{ provide: AppConfig, useValue: APP_DI_CONFIG })
]
})
export class MyModule { }O useExisting é semelhante ao useClass mas nos permite que seja utilizada uma única instancia de uma dependência.
@Injectable()
export class Servico {
sayHello() {
console.log(`Servico --> Hello`);
}
}
@Injectable()
export class Servico2 {
sayHello() {
console.log(`Servico2 --> Hello World`);
}
}
@NgModule({
providers: [
{provider: Servico, useExisting: Servico2}
]
})
export class MyModule { }Antes do lançamento do Angular 6, a única maneira de injetar dependências era especificar os serviços na propriedade providers do decorador @NgModule, @Component ou @Directive
import { Injectable } from '@angular/core';
@Injectable()
export class MyService {
constructor() { }
}
@NgModule({
providers: [MyService]
})
export class MyModule { }Com o lançamento do Angular 6, temos uma nova forma de declaração de dependências chamada "Tree-shakable providers", e nós a usamos empregando a nova propriedade providedIn do decorador @Injectable.
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root', //Prove serviço para o escopo do AppModule
})
export class MyService {
constructor() { }
}
@Injectable({
providedIn: MyModule, //Prove serviço para o escopo de um módulo especifico
})
export class MyService {
constructor() { }
}Podemos pensar em providedIn como uma dependência específica de maneira inversa. Ao vez de o módulo fornecer todos os seus serviços, agora é o próprio serviço que declara onde deve ser fornecido.

Node Sass
karma
Jasmine
JSON Server
Lodash
É um preprocessador de folhas de estilo que permite a compilação nativa de arquivos .scss para ganhos de desempenho.
O Karma não é um framework de testes nem uma biblioteca de asserções. O Karma apenas inicia um servidor HTTP e gera o arquivo HTML do executor de teste.
O Jasmine é uma ferramenta de desenvolvimento orientada por comportamento para testar código JavaScript.
O JSON Server é uma ferramenta que simula uma API REST.
$ npm i json-server --save-dev
$ json-server --watch db.jsonO Lodash é uma biblioteca JavaScript, que visa facilitar o trabalho com matrizes, números, objetos, strings etc. Os métodos modulares de Lodash são ótimos para:
Iterar matrizes, objetos e strings
Manipular e testar valores
Criar funções compostas
$ npm i -g npm
$ npm i --save lodash
import * as _ from 'lodash';Trabalhando com arrays
Trabalhando com coleções
Funções e operações matemáticas
PrimeNG
Generator Ultima
Componentes
PrimeNG é uma coleção de componentes de UI para Angular. Todos os widgets são open source e gratuitos para uso sob licença MIT.
Input | Button |
Data | Panel |
Overlay | File |
Menu | Charts |
Messages | Multimidia |
DragDrop |
É um gerador desenvolvido com o objetivo de fornecer uma aplicação básica Angular com um layout primeNG pré definido.
Instalação e uso
$ npm install -g yo
$ npm install -g generator-ultima --registry=http://element.basis.com.br/repository/npm-registry
$ yo ultimaAccessibility | Auxilia na acessibilidade das aplicações. |
Hide While Login | Previne a exibição de elementos na interface enquanto o redirecionamento pro SSO estiver em andamento. |
Security | Ferramentas pra auxiliar na segurança da aplicação. |
Version Tag | Exibe o atributo version do arquivo package.json do sistema. |
Error | Tratamento de erros comuns em requisições HTTP |
@nuvem/angular-base
$ npm install @nuvem/angular-base --saveDatatable → Tabelas dinâmicas, com menu de ações customizável, em conformidade com as diretrizes de usabilidade Basis.
Page Notification → Mostra mensagens de operação na tela
Block UI → Bloqueia a tela durante requisições dos tipos POST, PUT, PATCH e DELETE.
@nuvem/primeng-components
$ npm install @nuvem/primeng-components --save