O Angular sobreviveu e agora volta a ser hype

O Angular sobreviveu e agora volta a ser hype

Eduardo Florence

@eduardoflorence

eduardo@infolink.com.br

github.com/eduardoflorence

Desenvolvedor Full Stack

slides.com/eduardoflorence

O Angular morreu!

  • Foi uma referência na criação de SPA e data binding 
  • Long Term Support até 01 de Julho de 2021
  • Versão 1.7.x é a última
  • Criado em 2009 (Javascript ES2015 e NodeJS 4.0.0 são de 2015)
  • Mudança total da API em relação a versão 1.x (novo nome?)
  • Lançado no final de 2016 na versão 2.0 (versão 4.0 em março/17)
  • Uma nova grande versão a cada semestre (versão 9 quase pronta)
  • Auge do React

TypeScript

Angular

React

Vue.JS

Microsoft

Visual Studio Code

Grandes projetos

Produtividade

AirBnb

Boilerplate

O Angular voltou a ser hype?!

Visitantes

Únicos

2015

2016

2017

2018

http://angular.io

Aumento de downloads semanais

https://www.npmjs.com/

 Framework  Downloads
 Angular     +36,9%
 Vue.JS     +28,8%
 React     +1,9%

Março a Novembro de 2019

Empregabilidade

Ofertas de vagas          Angular          React
Rio de Janeiro                25                 12
São Paulo              137                 94
Argentina              502               453
Portugal              750               695
Irlanda              814               689

news.crunchbase.com/news/popular-web-frameworks-seed-early-stage-startups

Porque os grandes

bancos utilizam?

Tour pela plataforma

Angular

Angular CLI

ng new controle-vendas
cd controle-vendas
ng serve

ng generate module produtos
ng generate component produtos/produto-grade
ng test
ng e2e

ng build --prod

ng deploy

ng update
npm install -g @angular/cli

Angular Forms

import { ReactiveFormsModule } from '@angular/forms';
<label>
  Name:
  <input type="text" [formControl]="nome">
</label>

<label>
  Idade:
  <input type="text" [formControl]="idade">
</label>
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';

@Component({
  selector: 'app-name-editor',
  templateUrl: './name-editor.component.html',
  styleUrls: ['./name-editor.component.css']
})

export class NameEditorComponent {
  nome = new FormControl('');
  idade = new FormControl('');
}

Angular Router

const appRoutes: Routes = [
  { path: 'dashboard', component: DashboardComponent },
  { path: 'produtos/:id', component: ProdutosDetalhesComponent },
  { path: 'produtos', component: ProdutosComponent },
  { path: '', redirectTo: '/dashboad', pathMatch: 'full'},
  { path: '**', component: PageNotFoundComponent }
];
<a routerLink="/produtos" routerLinkActive="active">Produtos</a>
gotoProdutos() {
  this.router.navigate(['/produtos']);
}

Angular HTTP

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class ProdutosService {
  constructor(private http: HttpClient) { }
  
  getProdutos() {
    return this.http.get('http://api.com/produtos');
  }
}

Angular Animations

@Component({
  selector: 'app-open-close',
  animations: [
    trigger('openClose', [
      state('open', style({height: '200px', opacity: 1, backgroundColor: 'yellow'})),
      state('closed', style({height: '100px', opacity: 0.5, backgroundColor: 'green'})),
      transition('open => closed', [animate('1s')]),
      transition('closed => open', [animate('0.5s')]),
    ]),
  ],
  templateUrl: 'open-close.component.html',
  styleUrls: ['open-close.component.css']
})
<div [@openClose]="isOpen ? 'open' : 'closed'" class="open-close-container"> ... </div>

Angular Material

ng add @angular/material

Angular CDK

<cdk-virtual-scroll-viewport itemSize="50" class="lista">
  <div *cdkVirtualFor="let item of items" class="lista-item">{{item}}</div>
</cdk-virtual-scroll-viewport>

Drag and Drop

Virtual Scroll

Angular Flex-Layout

  • Layout Flex (Flexbox CSS)
  • Media Query 
  • Responsividade

Angular Compiler

  • Tree Shaking
  • Differential Loading
  • Ivy Renderer

Angular Tests

  • Teste de Unidade
  • Teste de Integração
  • Teste E2E
  • Teste de Cobertura
  • Integração Contínua

Angular Internationalization (i18n)

<!-- Antes -->
<h1>Olá Visitante</h1>
<!-- Depois -->
<h1 i18n="@@saudacao">Olá Visitante</h1>
ng xi18n
<trans-unit id="saudacao" datatype="html">
  <source>Olá Visitante</source>
  <target>Hello Guest</target>
</trans-unit>

Angular Server Side Rendering

ng add @nguniversal/express-engine

npm run build:ssr
npm run serve:ssr

Angular PWA

ng add @angular/pwa --project nome-projeto

ng build --prod
npm install http-server -g

http-server -p 8080 -c-1 dist/nome-projeto

Angular 9

Ivy Renderer

Benefícios do Ivy

  • Compilador e Renderizador
  • Redução no tempo de compilação e recompilação
  • Redução dos arquivos do bundle
  • Melhoria de desempenho
  • Mensagens de erro muito mais descritivas

Futuro do Ivy

  • Lazy Loading de componentes
  • Detecção de alterações sem refresh (hot reload)
  • Tree Shaking do Core do Angular
  • Redução do consumo de memória (foco mobile)
  • Metaprogramação
  • Criar componentes em tempo de execução

https://krausest.github.io/js-framework-benchmark/current.html

Comparação de Performance de Frameworks Javascript

Comunidade

Angular Rio de Janeiro

https://www.meetup.com/pt-BR/Angular-RJ/

https://t.me/angularrio

O Angular é uma opção

Obrigado!!!

Eduardo Florence

@eduardoflorence

eduardo@infolink.com.br

github.com/eduardoflorence

Desenvolvedor Full Stack

slides.com/eduardoflorence

O Angular sobreviveu e agora volta a ser hype

By Eduardo Florence

O Angular sobreviveu e agora volta a ser hype

Nesta talk veremos como a Google deu a volta por cima e reviveu a maior plataforma de desenvolvimento de Single Page Applications do mundo. Também analisaremos fatores como roadmap, comunidade e empregabilidade. Para finalizar, faremos um tour sobre as novas features do framework, incluindo o incrível compilador Ivy.

  • 108