SlideShare uma empresa Scribd logo
Angular 2
Loiane Groner
github.com/loiane
loiane.com
loiane.training
@loiane
em 60 minutos
• 10+ XP TI
• Java, JavaScript, Sencha, Angular
Phonegap/Ionic
• Blog: http://loiane.com
• Cursos: http://loiane.training
• Meus livros:
!==
TYPESCRIPT
TypeScript
ECMAScript 6
ECMAScript 5
ES 2015
Novembro 2009
meu-script.ts
transpiler
meu-script.js
ES5
Classes e Módulos
ECMAScript 7
ES 2016
Decorators e Async
Tipagem de dados, interfaces
O QUE PRECISAMOS INSTALAR
https://nodejs.org
TYPESCRIPT
https://www.typescriptlang.org/
TYPESCRIPT
$ npm install -g typescript
$ sudo npm install -g typescript
SOMENTE MAC OU LINUX
> npm install -g angular-cli
> ng new meu-projeto
> cd meu-projeto
> ng serve
> ng build
> ng test
> ng e2e
> ng deploy
Editores/ IDEs
COMPONENTES DIRETIVAS
ROTEAMENTOSERVIÇOS
TEMPLATE
DATA BINDINGINJEÇÃO
DEPENDÊNCIA
MÓDULOS
Blocos Principais
COMPONENTE
{…}
TEMPLATE
<..>
COMPONENTE
{…}
TEMPLATE
<..>
Binding de
Propriedades
COMPONENTE
{…}
TEMPLATE
<..>
Binding de
Propriedades
Binding de
Eventos
COMPONENTE
{…}
TEMPLATE
<..>
DIRETIVAS
{..}
Binding de
Propriedades
Binding de
Eventos
COMPONENTE
{…}
TEMPLATE
<..>
DIRETIVAS
{..}
SERVIÇOS
SERVIÇO A
SERVIÇO B
Binding de
Propriedades
Binding de
Eventos
COMPONENTE
{…}
TEMPLATE
<..>
DIRETIVAS
{..}
SERVIÇOS
SERVIÇO A
SERVIÇO B MÓDULO X
MÓDULO A
MÓDULO B
Binding de
Propriedades
Binding de
Eventos
Módulos
Imports das classes
Declaração dos
Components, Directives, Pipes que
queremos usar no projeto
Declaração dos
Components, Directives, Pipes que
queremos usar no projeto
Import dos Módulos que
serão usados por esse módulo
Declaração dos
Components, Directives, Pipes que
queremos usar no projeto
Import dos Módulos que
serão usados por esse módulo
Componente principal
da aplicação
Também podemos ter
módulo de funcionalidade
pra ajudar a organizar o
projeto
Também podemos ter
módulo de funcionalidade
pra ajudar a organizar o
projeto
Fornecedores de serviços
Admin
Usuários
Permissões
Shared/Common
Validações
Pipes
Produtos
ProdutosPainel
ProdutoLista
ProdutoDetalhe
ProdutoForm
Clientes
ClientesPainel
ClienteLista
ClienteDetalhe
ClienteForm
Vendas
VendasPainel
VendaLista
VendaDetalhe
VendaForm
VendaProdutosForm
Relatórios
RelatorioPrincipal
RelatorioClientes
RelatorioBuscaClientes
RelatorioProdutos
RelatorioBuscaProdutos
RelatorioVendas
RelatorioBuscaVendas
ExportarExcel
ExportarPDF
Raiz
AppComponent
NavBar
Menu
Componentes
Passo 1: Criar e Declarar Componente
Passo 1: Criar e Declarar Componente
Passo 1: Criar e Declarar Componente
Passo 1: Criar e Declarar Componente
Nome da tag a ser
utilizada
Passo 2: Importar e Declarar no módulo (e exportar caso queira
expor a outros módulos
Passo 3: Usar a tag do Componente criado
Passo 3: Usar a tag do Componente criado
Templates
Template contém o HTML que será renderizado
Pode ser declarado inline (no próprio componente)
Pode ser declarado inline (no próprio componente)
Ou num arquivo separado
Ou num arquivo separado
Estilizando componentes/
templates
Data
Binding
DATA BINDING
<TEMPLATE>
{COMPONENT}
DATA BINDING
<TEMPLATE>
{COMPONENT}
{{ valor }}
DATA BINDING
<TEMPLATE>
{COMPONENT}
{{ valor }}
[propriedade]="valor"
DATA BINDING
<TEMPLATE>
{COMPONENT}
{{ valor }}
[propriedade]="valor"
(evento)="handler"
DATA BINDING
<TEMPLATE>
{COMPONENT}
{{ valor }}
[propriedade]="valor"
(evento)="handler"
[(ngModel)]="propriedade"
#1: Interpolação
#1: Interpolação
#1: Interpolação
#2: Binding de propriedades (property binding)
#2: Binding de propriedades (property binding)
Todas as imagens tem o
mesmo resultado
#3: Class binding (também é property binding)
#3: Class binding (também é property binding)
Variável local
chamada class
#3: Class binding (também é property binding)
Variável local
chamada class
Property binding
#4: Style binding (também é property binding)
#4: Style binding (também é property binding)
Mostra o estilo
ou não?
#4: Style binding (também é property binding)
Mostra o estilo
ou não?
Expressão com o
valor da variável
#5: Event binding (binding de evento)
#5: Event binding (binding de evento)
Evento a ser
"escutado"
#5: Event binding (binding de evento)
Evento a ser
"escutado"
Método/Função a
ser executada
#5: Event binding (binding de evento)
Evento a ser
"escutado"
Método/Função a
ser executada
#5: Event binding (binding de evento)
Evento a ser
"escutado"
Método/Função a
ser executada
Como manter o template e o
componente atualizados?
Como manter o template e o
componente atualizados?
Como manter o template e o
componente atualizados?
Como manter o template e o
componente atualizados?
Property binding +
event binding
Como manter o template e o
componente atualizados?
#6: Binding de Model (two-way data-binding)
#6: Binding de Model (two-way data-binding)
#6: Binding de Model (two-way data-binding)
Two-way
data binding com
NgModel
Diretivas
TEXT
TIPOS DE DIRETIVAS
DIRETIVAS ESTRUTURAIS
Interagem com a view e
modificam a estrutura do DOM
e/ou código HTML
*ngFor
*ngIf
TEXT
TIPOS DE DIRETIVAS
DIRETIVAS ESTRUTURAIS
Interagem com a view e
modificam a estrutura do DOM
e/ou código HTML
*ngFor
*ngIf
DIRETIVAS DE ATRIBUTOS
Interagem com o elemento em
que foram aplicadas
ng-class
ng-style
Condicional If: JavaScript
Diretiva *ngIf
Loop for: JavaScript
Diretiva *ngFor
Property binding de classe
Diretiva ngClass
Criando uma diretiva customizada
Usando a diretiva
E como os componentes se comunicam?
Componente parente <-> filho?
Comunicação parente -> filho através de @Input()
Comunicação parente -> Filho através de @Input()
Comunicação parente -> Filho através de @Input()
2 - Usamos a anotação @Input nos atributos que
queremos expor
Comunicação filho -> parente através de @Output()
Comunicação filho -> parente através de @Output()
Emitimos o evento
"clicked"
Com @Output podemos escutar eventos customizados
Com @Output podemos escutar eventos customizados
Serviços
Passo 1: Criar uma classe com métodos!
Passo 1: Criar uma classe com métodos!
Injeção de
Dependência
Passo 2: Decorar a classe
Passo 2: Decorar a classe
Importar
Passo 3: Importar e registrar como
fornecedor de dados no módulo
Passo 3: Importar e registrar como
fornecedor de dados no módulo
Importar
Passo 4: Importar e passar o serviço para o construtor da classe
Passo 4: Importar e passar o serviço para o construtor da classe
Importar
Passo 1: Importar e Injetar na classe (serviço)
Passo 1: Importar e Injetar na classe (serviço)
Importar
Não esquecer de ter o módulo Http importado no módulo
também
Não esquecer de ter o módulo Http importado no módulo
também
Importar o
módulo
Só usar os métodos get, post, put e delete!
Exemplo CRUD com REST
Upload Arquivo
https://github.com/angular/http/issues/75
Por enquanto: upload de arquivo "na mão"
Coisa linda!
Coisa linda!
fluxos:
.do
.map
.filter
.when
.add
Coisa linda!
fluxos:
.do
.map
.filter
.when
.add
Programação reativa!
No componente é só se inscrever no Observador (Observable)
LIFE CYCLE HOOKS
# EVENTO (HOOKS) QUANDO?
ngOnChanges1 antes #2 e quando valor property-binding é atualizado
LIFE CYCLE HOOKS
# EVENTO (HOOKS) QUANDO?
ngOnChanges1 antes #2 e quando valor property-binding é atualizado
ngOnInit2 quando Component é inicializado
LIFE CYCLE HOOKS
# EVENTO (HOOKS) QUANDO?
ngOnChanges1 antes #2 e quando valor property-binding é atualizado
ngOnInit2 quando Component é inicializado
ngDoCheck3 a cada ciclo de verificação de mudanças
ngAfterContentInit4 depois de inserir conteúdo externo na view
ngAfterContentChecked5 a cada verificação de conteúdo inserido
ngAfterViewChecked6 a cada verificação de conteúdo / conteúdo filho
LIFE CYCLE HOOKS
# EVENTO (HOOKS) QUANDO?
ngOnChanges1 antes #2 e quando valor property-binding é atualizado
ngOnInit2 quando Component é inicializado
ngDoCheck3 a cada ciclo de verificação de mudanças
ngAfterContentInit4 depois de inserir conteúdo externo na view
ngAfterContentChecked5 a cada verificação de conteúdo inserido
ngAfterViewChecked6 a cada verificação de conteúdo / conteúdo filho
ngOnDestroy7 antes da diretiva/component ser destruído
Roteamento
Passo 1: app.routing.ts
Passo 1: app.routing.ts
Passo 1: app.routing.ts
Passo 1: app.routing.ts
Passo 2: importar arquivo no app.module e declarar nos imports
Importar as rotas
Passo 3: Adicionar o router-outlet no seu componente principal
Passo 4: Adicionar os links de roteamento na aplicação
Organizando as
rotas do projeto
Módulo Usuários: criar arquivo users.routing.ts
(também não esquecer de importar no app.module.ts
Pode passar parâmetro pra rota também!
E pra obter o parâmetro da rota:
E pra obter o parâmetro da rota:
Não esquecer de importar e injetar no construtor
Rotas filhas
Passo 1: Declarar rota parente e rotas filhas
Passo 1: Declarar rota parente e rotas filhas
Passo 2: no componente parente também é
preciso de declarar o router-outlet
Passo 2: no componente parente também é
preciso de declarar o router-outlet
Guards:
canActivate
canDeactivate
Passo 1: Adicionar a guarda na rota
Passo 1: Adicionar a guarda na rota
Passo 2: criar um serviço com a lógica (usuário logado, etc)
Passo 2: criar um serviço com a lógica (usuário logado, etc)
Passo 2: criar um serviço com a lógica (usuário logado, etc)
Passo 2: criar um serviço com a lógica (usuário logado, etc)
Passo 3: declarar o serviço guarda como provider no módulo
Passo 3: declarar o serviço guarda como provider no módulo
Passo 1: criar serviço de guarda
Passo 2: implementar a lógica
No desativamento da rota, verificar se tem mudanças no formulário.
Passo 3: adicionar guarda na rota
Passo 3: adicionar guarda na rota
e tem mais!
Pipes
Decortator @Pipe
Pra usar: | nomeDoPipe
Formulários
2 TIPOS NO ANGULAR 2
•Data-driven (Formulário reativo)
•Lógica de validação no Component
•Template driven
•Lógica de validação no form
Template-driven
Template-driven
Template-driven
Template-driven
Super hiper mega
importante!
Template-driven
Template-driven
Template-driven
Template-driven
Template-driven
Template-driven
Template-driven
Template-driven
Super hiper mega
importante!
Variável
local referenciando o campo
pra validação
Template-driven
Template-driven
Data-driven
Data-driven
Data-driven
Super hiper mega
importante #1
Data-driven
Data-driven
Data-driven
Super hiper mega
importante #2
Data-driven
Data-driven
Data-driven
Data-driven
Data-driven: submit: já temos o form!
Data-driven: validação customizada
> npm install -g angular-cli
> ng new meu-projeto
> cd meu-projeto
> ng serve
ANGULAR CLI: CRIANDO COMPONENTS
> cd NomeProjeto
> ng generate component meu-primeiro
> ng g component meu-primeiro
ANGULAR CLI: CRIANDO COMPONENTS
Convenção de nomenclatura
meu-primeiro.component.ts
Palavras separadas por “-“
Ponto
“component" -> para indicar que é um componente
Ponto
ts -> extensão typescript
Convenção de nomenclatura
export class MeuPrimeiroComponent {}
meu-primeiro.component.ts
Convenção de nomenclatura
export class MeuPrimeiroComponent {}
meu-primeiro.component.ts
O mesmo se aplica a service.ts,
pipe.ts, directive.ts, etc
Dicas
Projetos
Grandes
Lazy loading +
módulos
Roteamento:
loadChildren
Roteamento:
loadChildren
Carrega a aplicação
Carrega o módulo
Ahead of Time
Compilation
DESENVOLVIMENTO DO PROJETO COM ANGULAR 2 + TYPESCRIPT
COMPILAÇÃO DA APLICAÇÃO COM TSC (COMPILADOR TS)
BUNDLING (TUDO EM UM ARQUIVO APENAS)
MINIFICAÇÃO
DEPLOY
Compilação "normal"
DOWNLOAD DE TODOS OS ARQUIVOS JAVASCRIPT
BOOTSTRAP DO ANGULAR 2
COMPILAÇÃO EM TEMPO REAL
APLICAÇÃO É RENDERIZADA
DESENVOLVIMENTO DO PROJETO COM ANGULAR 2 + TYPESCRIPT
COMPILAÇÃO DA APLICAÇÃO COM NGC (ANGULAR2 COMPILER)
BUNDLING (TUDO EM UM ARQUIVO APENAS)
MINIFICAÇÃO
DEPLOY
COMPILAÇÃO DO PROJETO E TEMPLATES PARA TS
COMPILAÇÃO DO PROJETO DE TS PARA JS
Compilação aot
DOWNLOAD DE TODOS OS ARQUIVOS JAVASCRIPT
BOOTSTRAP DO ANGULAR 2
APLICAÇÃO É RENDERIZADA
ANGULAR CLI: NG SERVE OU BUILD —AOT
> cd NomeProjeto
> ng serve —-aot
> ng build —-aot
Juntando tudo!
Demo
•https://github.com/loiane/curso-angular2
•https://github.com/loiane/angular2-pokedex
•https://github.com/loiane/angular2-crud-rest
•https://github.com/loiane/angular2-crud-auth-routing
http://loiane.training
Curso Gratuito!
http://loiane.com
facebook.com/loianegroner
twitter.com/loiane
https://github.com/loiane
youtube.com/loianegroner
http://loiane.training

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Gerenciamento de estado no Angular com NgRx
Gerenciamento de estado no Angular com NgRxGerenciamento de estado no Angular com NgRx
Gerenciamento de estado no Angular com NgRx
 
Hashicorp-Certified-Terraform-Associate-v3-edited.pptx
Hashicorp-Certified-Terraform-Associate-v3-edited.pptxHashicorp-Certified-Terraform-Associate-v3-edited.pptx
Hashicorp-Certified-Terraform-Associate-v3-edited.pptx
 
40+ tips to use Postman more efficiently
40+ tips to use Postman more efficiently40+ tips to use Postman more efficiently
40+ tips to use Postman more efficiently
 
Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)Domain Modeling with FP (DDD Europe 2020)
Domain Modeling with FP (DDD Europe 2020)
 
Angular 10 course_content
Angular 10 course_contentAngular 10 course_content
Angular 10 course_content
 
CQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony applicationCQRS and Event Sourcing in a Symfony application
CQRS and Event Sourcing in a Symfony application
 
Design Patterns in React
Design Patterns in ReactDesign Patterns in React
Design Patterns in React
 
Arquitetura Node com NestJS
Arquitetura Node com NestJSArquitetura Node com NestJS
Arquitetura Node com NestJS
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
NestJS - O framework progressivo
NestJS - O framework progressivoNestJS - O framework progressivo
NestJS - O framework progressivo
 
Automated Frontend Testing
Automated Frontend TestingAutomated Frontend Testing
Automated Frontend Testing
 
React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥React + Redux + TypeScript === ♥
React + Redux + TypeScript === ♥
 
The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)
 
Selenium TestNG
Selenium TestNGSelenium TestNG
Selenium TestNG
 
Web components with Angular
Web components with AngularWeb components with Angular
Web components with Angular
 
Express js
Express jsExpress js
Express js
 
Type script - advanced usage and practices
Type script  - advanced usage and practicesType script  - advanced usage and practices
Type script - advanced usage and practices
 
AngularJS Internal
AngularJS InternalAngularJS Internal
AngularJS Internal
 
AngularJS Architecture
AngularJS ArchitectureAngularJS Architecture
AngularJS Architecture
 

Destaque

Destaque (11)

Angular 2 overview in 60 minutes
Angular 2 overview in 60 minutesAngular 2 overview in 60 minutes
Angular 2 overview in 60 minutes
 
Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10Campus Party Brasil 2017: Angular 2 #cpbr10
Campus Party Brasil 2017: Angular 2 #cpbr10
 
Introducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na praticaIntroducao ao Ionic 2 na pratica
Introducao ao Ionic 2 na pratica
 
Ionic 2 na pratica!
Ionic 2 na pratica!Ionic 2 na pratica!
Ionic 2 na pratica!
 
DevFest BH: Ionic 2
DevFest BH: Ionic 2DevFest BH: Ionic 2
DevFest BH: Ionic 2
 
Tutorial do app e o divulgador
Tutorial do app e o divulgadorTutorial do app e o divulgador
Tutorial do app e o divulgador
 
DevFest Nordeste: Ionic 2
DevFest Nordeste: Ionic 2DevFest Nordeste: Ionic 2
DevFest Nordeste: Ionic 2
 
Mobile Summit Brazil: Ionic 2
Mobile Summit Brazil: Ionic 2Mobile Summit Brazil: Ionic 2
Mobile Summit Brazil: Ionic 2
 
TDC SP 2016: Ionic 2
TDC SP 2016: Ionic 2TDC SP 2016: Ionic 2
TDC SP 2016: Ionic 2
 
Open Source Mobile Experience: Ionic 2
Open Source Mobile Experience: Ionic 2Open Source Mobile Experience: Ionic 2
Open Source Mobile Experience: Ionic 2
 
Oficina App Inventor
Oficina App InventorOficina App Inventor
Oficina App Inventor
 

Semelhante a Angular 2 em 60 minutos

Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Allyson Barros
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 

Semelhante a Angular 2 em 60 minutos (20)

Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLI
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
Python 08
Python 08Python 08
Python 08
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Workshop ASP.NET MVC 5
Workshop ASP.NET MVC 5Workshop ASP.NET MVC 5
Workshop ASP.NET MVC 5
 
Selenium - WebDriver
Selenium - WebDriverSelenium - WebDriver
Selenium - WebDriver
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Cucumber-QA_Night
Cucumber-QA_NightCucumber-QA_Night
Cucumber-QA_Night
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Cucumber
CucumberCucumber
Cucumber
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 

Angular 2 em 60 minutos