Desenvolvimento Fácil com AngularJS DevFestSul

52
Client logo Desenvolvendo Fácil com Por: Saulo Venancio @saulovenancio [email protected]

description

Apresentação AngularJS DevFestSul 2014, no dia 24/09/2014

Transcript of Desenvolvimento Fácil com AngularJS DevFestSul

Page 1: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Desenvolvendo Fácil com

Por: Saulo Venancio@saulovenancio

[email protected]

Page 2: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Introdução

Características do AngularJS

Data-binding de 2 vias

Classes Dinâmicas

Repetidores

Validações

Filtros

Separação de Responsabilidades

Fábricas, Serviços e Afins

Diretivas

Conceitos Avançados

Page 3: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Introdução

Page 4: Desenvolvimento Fácil com AngularJS DevFestSul

Quem sou eu?

• Desenvolvedor Backend desde 2009

• Instrutor de Programação na Voffice, Florianópolis

• Atuou com .NET / Java / Javascript

• Hoje,

- Desenvolvedor AngularJS / AEM na Nonlinear Creations

• Apaixonado por tecnologia, empreendedorismo e programação

• Github: saulovenancio

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 4

Page 5: Desenvolvimento Fácil com AngularJS DevFestSul

O Problema• Como habilitar div quando checkbox for selecionado?

• Com Jquery

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 5

Page 6: Desenvolvimento Fácil com AngularJS DevFestSul

Codificar é divertido?

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 6

Page 7: Desenvolvimento Fácil com AngularJS DevFestSul

Sim, é divertido!

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 7

• Com AngularJS

Page 8: Desenvolvimento Fácil com AngularJS DevFestSul

Por que aprender?

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 8

Vamos Conhecer!

Page 9: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Características do AngularJS

Page 10: Desenvolvimento Fácil com AngularJS DevFestSul

Características• Data Binding de 2 vias

• Separação Lógica e Visão

• Testabilidade (Unitários e Integração)

• Componentização

• Filtros, ordenação, etc.

• Extensa documentação e components de terceiros

• SPA, Single Page Application

• Comunidade Ativa

• Mantenedor: Google!

• Vamos ver algumas características técnicas…..10

Page 11: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Data binding de 2 vias

Nunca foi tão tão facil manter a view atualizada

Page 12: Desenvolvimento Fácil com AngularJS DevFestSul

Data Binding de 2 vias

• Código

• Resultado

• Mágica? Não. Dirty checking.

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 12

Page 13: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Classes Dinâmicas

Controle a aparência

Page 14: Desenvolvimento Fácil com AngularJS DevFestSul

Classes Dinâmicas

• Código

• Resultado

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 14

Page 15: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Repetidores

Itere em coleções

Page 16: Desenvolvimento Fácil com AngularJS DevFestSul

Repetidores• Fácil iterar em coleções de valores

• Cada rota tem sua própria div

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 16

Page 17: Desenvolvimento Fácil com AngularJS DevFestSul

Repetidores• Em objetos

• Resultado:

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 17

Page 18: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Validações

De vários tipos

Page 19: Desenvolvimento Fácil com AngularJS DevFestSul

Validações por Padrões/Regex

Page 20: Desenvolvimento Fácil com AngularJS DevFestSul

Validações de Mínimo/Máximo

Page 21: Desenvolvimento Fácil com AngularJS DevFestSul

Validações de Obrigatoriedade

Page 22: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Filtros

Somente o que você deseja

Page 23: Desenvolvimento Fácil com AngularJS DevFestSul

Filtros Simples/Avançados

Page 24: Desenvolvimento Fácil com AngularJS DevFestSul

Ordene e Inverta

Page 25: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Separação de Responsabilidades

Page 26: Desenvolvimento Fácil com AngularJS DevFestSul

Separação de Responsabilidades

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 26

• AngularJS é MVW

- Novo conceito próprio: ESCOPO

• MVW:

- Modelo: Dados da aplicação

- Visão: Telas da aplicação

- Whatever/Escopo, responsável por:- Lógica de tela (interação com usuário)

- Dados da visão (NÃO do modelo!)

Page 27: Desenvolvimento Fácil com AngularJS DevFestSul

Separação de Responsabilidades

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 27

• Controlador

- Dá acesso o escopo

- Cuidado para não encher de tralha! Mas como?• Serviços

• Fábricas

• Valores

• Constantes

Page 28: Desenvolvimento Fácil com AngularJS DevFestSul

Controlador, Escopo e Visão

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 28

Page 29: Desenvolvimento Fácil com AngularJS DevFestSul

Controlador

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 29

Page 30: Desenvolvimento Fácil com AngularJS DevFestSul

Controlador na Visão

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 30

Page 31: Desenvolvimento Fácil com AngularJS DevFestSul

Resultado

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 31

Page 32: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Fábricas, Serviços e Afins

Empacotando código reutilizável

Page 33: Desenvolvimento Fácil com AngularJS DevFestSul

Fábricas, Serviços e Afins

• Valores:

- Injetável em serviços, fábricas e controladores

- Qualquer tipo de dado Javascript• Number, String, Object, etc

• Constantes

- Injetável em serviços, fábricas, controladores e na função de configuração de um modulo

- Normalmente valores fixos da sua aplicação• Ex: endereço de backend, roles (permissões), etc

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 33

<body ng-app="todo"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar-dark"> <h1 class="title">Todo</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar-dark"> <h1 class="title">Projects</h1> </ion-header-bar> </ion-side-menu> </ion-side-menus> </body>

Page 34: Desenvolvimento Fácil com AngularJS DevFestSul

Fábricas, Serviços e Afins

• Valores:

• Constantes

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 34

<body ng-app="todo"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar-dark"> <h1 class="title">Todo</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar-dark"> <h1 class="title">Projects</h1> </ion-header-bar> </ion-side-menu> </ion-side-menus> </body>

Page 35: Desenvolvimento Fácil com AngularJS DevFestSul

Fábricas, Serviços e Afins

• Serviços:

- Funcionalidades reutilizáveis

- Só é instanciado uma única vez: SINGLETON

- Portanto, cuidado, dados internos são compartilhados.

• Factories

- Fábricas de objetos: cria instâncias de objetos com estrutura comum

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 35

<body ng-app="todo"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar-dark"> <h1 class="title">Todo</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar-dark"> <h1 class="title">Projects</h1> </ion-header-bar> </ion-side-menu> </ion-side-menus> </body>

Page 36: Desenvolvimento Fácil com AngularJS DevFestSul

Fábricas, Serviços e Afins• Serviços:

• Factories

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 36

<body ng-app="todo"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar-dark"> <h1 class="title">Todo</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar-dark"> <h1 class="title">Projects</h1> </ion-header-bar> </ion-side-menu> </ion-side-menus> </body>

Page 37: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Diretivas

Ensine ao HTML novos truques

Page 38: Desenvolvimento Fácil com AngularJS DevFestSul

Diretivas

• Permite Componentização

• Algumas Bibliotecas:

- AngularUI • http://angular-ui.github.io/

- Ionic (Mobile)• http://ionicframework.com/

• Vamos brincar!

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 38

<body ng-app="todo"> <ion-side-menus> <!-- Center content --> <ion-side-menu-content> <ion-header-bar class="bar-dark"> <h1 class="title">Todo</h1> </ion-header-bar> <ion-content> </ion-content> </ion-side-menu-content> <!-- Left menu --> <ion-side-menu side="left"> <ion-header-bar class="bar-dark"> <h1 class="title">Projects</h1> </ion-header-bar> </ion-side-menu> </ion-side-menus> </body>

Page 39: Desenvolvimento Fácil com AngularJS DevFestSul

39

• O que faz?

- Texto em seu atributo fica vermelho

• Javascript

Diretiva Simples

Page 40: Desenvolvimento Fácil com AngularJS DevFestSul

40

• HTML

- Diretiva deve estar dentro do element ng-app

• Resultado

Nosso relógio

Page 41: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Conceitos Avançados

Começando a diversão!

Page 42: Desenvolvimento Fácil com AngularJS DevFestSul

42

• Arghhhh, meu controlador precisa dos serviços

- $location

- $routeParams

• Somente o Angular

poderá nos salvar

Injeção de Dependência

Page 43: Desenvolvimento Fácil com AngularJS DevFestSul

43

Injeção de Dependência

para serviços conhecidos

• Nas funções do Angular

- Basta inserir parâmetro com nome da dependência

• Para injetar seus serviços

- Certifique que o script de seus serviços foi carregado previamente.

• Cuidado ao minificar

Page 44: Desenvolvimento Fácil com AngularJS DevFestSul

• Meu serviço

• Injetando

44

Injetando Meu serviço

Page 45: Desenvolvimento Fácil com AngularJS DevFestSul

Modularização

• Criar módulos com meus components

• Criando um modulo

• Uso modulo no meu app

Page 46: Desenvolvimento Fácil com AngularJS DevFestSul

Modularização

• Agora posso injector o valor que estava no modulo em parte do meu app

• Meu controlador

Page 47: Desenvolvimento Fácil com AngularJS DevFestSul

47

• Unitário

- Karma Runner e Angular-mocks

• E2E, Integração

- Protractor• Automatizando funcionamento do browser

Testabilidade

Page 48: Desenvolvimento Fácil com AngularJS DevFestSul

E mais

• Filtros Customizados

• Iteradores específicos para opçoes de <select></select>

• Gerenciador de Rotas

• Animaçoes

• Templates……

• I18n, I10n

Page 49: Desenvolvimento Fácil com AngularJS DevFestSul

Client logo

Referências

Iniciando sobre o ombro de gigantes!

Page 50: Desenvolvimento Fácil com AngularJS DevFestSul

Referências

• Pro Angular – Adam Freeman

• Mastering Web Application Development with AngularJS - Peter Bacon Darwin, Pawel Kozlowski

• http://www.angularjs.org

• Vídeos

- ngConf no Youtube

- Egghead.io

- Pluralsight

• Github, Google Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 50

Page 51: Desenvolvimento Fácil com AngularJS DevFestSul

Materiais

• Apresentação

- bit.ly/1vvHjmi

• Slides

- slideshare.net/saulovenancio

Toronto | Ottawa | New York | Calgary | São Paulo | Florianópolis 51

Page 52: Desenvolvimento Fácil com AngularJS DevFestSul

Obrigado!

Saulo Venâ[email protected]

@saulovenancio