Patrick Augusto Gonçalves pkgoncalves@gmail.com



Documentos relacionados
DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Programando em PHP. Conceitos Básicos

Scriptlets e Formulários

ANEXO 11. Framework é um conjunto de classes que colaboram para realizar uma responsabilidade para um domínio de um subsistema da aplicação.

Desenvolvendo Websites com PHP

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

mkdir /srv/www/default/html/calculadora/imagens mkdir /srv/www/default/html/calculadora/blocos

Aula 03 - Projeto Java Web

Web Design. Prof. Felippe

Sistemas para internet e software livre

HTML / JAVASCRIPT. A versão atual é o HTML5 (seus predecessores imediatos são HTML 4.01, XHTML 1.1, etc.).

Desenvolvimento de aplicação web com framework JavaServer Faces e Hibernate

Java II. Sérgio Luiz Ruivace Cerqueira

Associação Carioca de Ensino Superior Centro Universitário Carioca

wireframe do novo site

Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Felippe Scheidt IFPR Campus Foz do Iguaçu 2014/2

Manual do Usuário - ProJuris Web - Fila de s Página 1 de 8

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

Acessando um Banco de Dados

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

Google Drive. Passos. Configurando o Google Drive

Produto: Webscan Relatório II Programas desenvolvidos, testados e documentados

Programação Web Prof. Wladimir

Manual do Painel Administrativo

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

atividade florestal não-madeireira título da categoria com opção de uso de icone

Sistema de Digitalização e Gerenciamento de Arquivos On-Line

02 - Usando o SiteMaster - Informações importantes

Manual de Integração Via Gadget. Passo a passo para realizar a integração entre websites e a plataforma Virtual Target.

VISUAL LIGHTBOX FERRAMENTA WEB DESIGN FABIANO KEIJI TAGUCHI

Parte I. Demoiselle Mail

MANUAL DE UTILIZAÇÃO

Desenvolvendo para WEB

Repeater no GASweb. Regiões

Programação Web com Webdev 19 Julio Cesar Pedroso Conteúdo

Desenvolvedor Web Docente André Luiz Silva de Moraes

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Cursos de Magento Gugliotti Consulting

Introdução ao HTML 5 e Implementação de Documentos

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Práticas de Desenvolvimento de Software

Está apto a utilizar o sistema, o usuário que tenha conhecimentos básicos de informática e navegação na internet.

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS -HTML 5: ARMAZENAMENTO DE DADOS (CLIENTE) Prof. Angelo Augusto Frozza, M.Sc.

Configurando o IIS no Server 2003

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

5 Detalhes da Implementação

Desenvolvimento de Sites com PHP e Mysql Docente André Luiz Silva de Moraes

PROGRAMAÇÃO MANUAL DE INSTRUÇÕES SEJA BEM VINDO VERSÃO /01/2013 UDS SOLUÇÕES DIGITAIS

Manual do Visualizador NF e KEY BEST

Introdução. História. Como funciona

Programação para web JavaScript

EAI Manual do Administrador

JSF e PrimeFaces. Professor: Ricardo Luis dos Santos IFSUL Campus Sapucaia do Sul

Cookies. Krishna Tateneni Jost Schenck Tradução: Lisiane Sztoltz

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

INSTALAÇÃO DO SISTEMA CONTROLGÁS

Web Design Aula 11: Site na Web

OS CAMINHOS PARA UMA APOSENTADORIA PLANEJADA

Informática I. Aula 6. Aula 6-12/09/2007 1

Manual do Contribuidor. Portal de Internet. Projeto: Novo Portal de internet

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

Tutorial do Sistema de Gestão de Conteúdos para Web - SYSWEB

PHP AULA1. Prof. Msc. Hélio Esperidião

PROGRAMAÇÃO PARA INTERNET. Fonte: Raul Paradeda

Mais sobre uso de formulários Site sem Ajax

Ajax Asynchronous JavaScript and Xml

Controle do Arquivo Técnico

Requisições de Materiais - Almoxarifado Módulo Portal Administrativo - SIPAC

Introdução à Tecnologia Web. Tipos de Sites. Profª MSc. Elizabete Munzlinger

Lista de operadores de comparação - > Maior que - < Menor que - <= Menor ou igual a - >= Maior ou igual a - === Igual a -!

CONSTRUÇÃO DE BLOG COM O BLOGGER

R.Boquino Manual de Identidade Visual

PROGRAMAÇÃO PARA INTERNET RICA FUNDAMENTOS DO JQUERY

Como implementar Cache Busting nas tags da Atlas. O que são tags? O que é Cache Busting?

Tutorial WEB CONTENT MANAGEMENT [WCM] Obtenha benefícios a partir das aplicações customizadas da ADMT.

Programação WEB II. Sessions e Cookies. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

ZEND F r a m e w o r k

Introdução a listas - Windows SharePoint Services - Microsoft Office Online

Conteúdo Dinâmico. Introdução. Interação Browser x Servidor Web. Interação Browser x Servidor Web

Módulo e-rede Prestashop v1.0. Manual de. Instalação do Módulo. estamos todos ligados

jquery André Tavares da Silva

Lista de Revisão. 3. Analise a afirmativa a seguir como verdadeira ou falsa e justifique.

Módulo e-rede OpenCart v1.0. Manual de. Instalação do Módulo. estamos todos ligados

Manual do Usuário Android Neocontrol

Construindo portais com Plone. Módulo 3 Templates

Version Notes (Notas da versão) Versão

Coleção - Análises de marketing em clientes de

Módulo Publicações Publicações On Line. Módulo Publicações

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Aula 1: Noção Básica e Criação de Tabelas.

Olá, esse é o manual feito para ajudar você a conhecer ainda mais o Painel Web que acompanha* App Kontrole.

Criando um script simples

Boas Práticas de Desenvolvimento Seguro

Transcrição:

Single Page Apps com AngularJS Patrick Augusto Gonçalves pkgoncalves@gmail.com

Vamos Começar do Começo O que são Single Page Apps? Por que usar? O que eu ganho com isso?

Modelo Clássico de Aplicações Web

Domain Request Request Browser GET / clientes Network GET / clientes Servidor Request Controller HTML Response Response <html> <body> </body> </html> <html> <body> </body> </html> View

Modelo Clássico Full Response Cada requisição do browser provoca uma atualização completa da página. Além do código HTML, recursos de imagem, scripts e folhas de estilo também podem ser recarregados, caso nenhuma medida de cache seja utilizada.

Modelo Clássico Full Response Tráfego elevado de dados eleva custo de hospedagem em serviços de cloud computing, como Amazon EC2 por exemplo. Apesar de não ser impossível, é mais difícil escalar uma aplicação no modelo clássico devido principalmente ao gerenciamento de sessões de usuários.

Existe uma alternadva?

Sim!

Sim! Single Page Apps

Single Page Apps Aplicações ou sites web que utilizam apenas uma página HTML para apresentar os dados e elementos web, sem precisar recarregar completamente a página no momento em que o usuário navega de uma funcionalidade para outra.

Single Page Apps Primeira requisição carrega o código HTML da página principal que a partir de então servirá como visão principal ou shell da aplicação. Códigos JavaScript necessários para a execução da aplicação também são carregados neste momento.... assim como folhas de estilo.

Single Page Apps Primeira Requisição GET / index.html GET / index.html HTML HTML HTML index.html Browser Próximas Requisições GET /clientes/ 1 Network GET /clientes/ 1 Servidor GET /clientes/ 1 Controller JSON { id: 1, nome: abc, fone: 12345 } JSON { id: 1, nome: abc, fone: 12345 } { id: 1, nome: abc, fone: 12345 } Domain

Single Page Apps Primeira Requisição pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição GET /pagina.html pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição HTTP 200 ok pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição pagina.html Web Browser Servidor

Single Page Apps Primeira Requisição Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) REST Endpoint Banco de Dados Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) GET /api/users/1 REST Endpoint Banco de Dados Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) GET /api/users/1 REST Endpoint Banco de Dados Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) REST Endpoint Banco de Dados Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) REST Endpoint Banco de Dados Web Browser Servidor

Single Page Apps Dados são requisitados através de WebServices (REST na maioria) HTTP 200 OK REST Endpoint application/json { id: 1, username: auser, email: user@p.com } Banco de Dados Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. /views/fragment.html Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. GET /views/fragment.html /views/fragment.html Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. HTTP 200 ok text/html /views/fragment.html Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. Web Browser Servidor

Single Page Apps Pequenos trechos de código HTML são carregados dinâmicamente. Web Browser Servidor

A primeira página não vai ficar muito pesada?

Técnicas de minification, gzip compression e carregamento dinâmico de scripts (AMD) minimizam bastante o problema. Requisições completas no modelo clássico de aplicações web trafegam uma quantidade consideravelmente maior de dados durante sua utilização. Após a primeira requisição, somente dados e fragmentos HTML ainda não carregados são obtidos do servidor.

Primeira Requisição

Navegação para Segunda Visão

Voltando para Primeira Visão

Como eu crio então SPAs com AngularJS?

Primeiro Passo Fazer download dos arquivos JavaScript que devem ser incluídos na aplicação. www.jquery.org www.angularjs.org

Primeiro Passo

Primeiro Passo

Primeiro Passo

Segundo Passo Incluir bibliotecas na página HTML principal da aplicação através das tag <script>.

<html> <head> <title>myapp</title> <script type= text/javascript" src="/js/jquery-1.11.1.js"> </script> <script type= text/javascript" src="/js/angular.js"> </script> </head> <body> Page Content </body> </html>

Terceiro Passo <codificar/>

Vamos por partes.

AngularJS Building Blocs Template Engine Data Binding Controllers Services Routing Dependency Injection entre outros.

Dependency Injection Considerada por muitos como o ponto mais forte do AngularJS. Nos permite injetar dependências em um controlador, serviço ou diretiva da mesma forma que frameworks famosos como o Spring, CDI ou Google Guava fazem na plataforma Java.

Dependency Injection - Exemplo Definição de dependência. Injeção de dependência. Código disponível em: hzps://github.com/pkgoncalves/ngstore

Template Engine Código HTML comum contendo elementos e atributos específicos do AngularJS. AngularJS renderiza as páginas da aplicação, combinando os elementos de template com os dados presentes no modelo e nos controladores.

<html ng-app> <body ng-controller="mycontroller"> <input ng-model="foo" value="bar > <button ng-click="changefoo()">{{buttontext}}</button> <script src="angular.js"> </body> </html>

Template Engine Algumas das Diretivas Mais Utilizadas nginclude: inclui conteúdo HTML em uma página existente. ngapp: inicializa uma página HTML como um documento de visão AngularJS. ngmodel: indica a qual propriedade de objeto um campo de formulário está associado. ngclick: indica qual método do controller a aplicação deve executar quando um determinado botão é pressionado. ngif: inclui ou exclui um elemento da página HTML. ngview: indica em qual local o conteúdo das visões da aplicação devem ser renderizadas (routing engine).

Template Engine No código HTML, as diretivas aparecem no formato ng-nome-da-diretiva. Camel case é transformado em palavras separadas por traços. ngclick ngmodeloptions ng-click ng-model-options

Template Engine A documentação oficial na página do projeto contém uma relação de todas as diretivas disponíveis para utilização em templates.

Template Engine

Template Engine - Exemplo Repete a tag <tr> para cada elemento da lista clientes. Imprime na tag <td> o id de um objeto cliente. Invoca a função excluir do controlador, passando o objeto cliente como parâmetro. Código disponível em: hzps://github.com/pkgoncalves/ngstore

A propósito, o que significa aquele ng antes do nome de cada diretiva?

ng = Angular Prefixo reservado. Utilizado para identificar as diretivas implementadas pelo próprio AngularJS. Sim, você pode criar suas próprias diretivas. Mais informações em: https://docs.angularjs.org/guide/directive

Um template sozinho não faz verão.

Por isso, apresentamos os Controladores.

Por isso, apresentamos os Controladores. Ligue agora para 0800 999 8817902 3 para *adquirir o seu. *Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam erat eros, pretium ac fringilla id, ullamcorper eu purus. Cras pellentesque, nunc sed hendrerit convallis, est urna malesuada sem, sit amet aliquet est dolor sed diam. Sed lacinia elementum risus a euismod. Sed condimentum eros eget nisi sodales, eget luctus orci convallis. Aliquam erat volutpat.

Controladores No AngularJS, controladores são utilizados para se programar o comportamento das visões. Controladores sempre estão associados a um escopo.

Controladores Utilize controladores para: Configurar o estado inicial do escopo de uma visão. Adicionar comportamento ao escopo de uma visão.

Controlador - Exemplo Nome do módulo ao qual o controlador será adicionado. Injeção do objeto escopo. Este objeto será também udlizado pelo template para renderização da página. Nome do controlador. Inicialização de variáveis. Código disponível em: hzps://github.com/pkgoncalves/ngstore

Roteamento AngularJS possui um mecanismo de roteamento pronto para uso. Deve ser inicializado no momento da configuração inicial de um módulo. Trabalha em conjunto com a diretiva ngview, pois é na área definida por ela que a nova visão será renderizada.

Roteamento - Exemplo Definição do módulo. Função de configuração. Devemos declarar a dependência do módulo ngroute e injetar o objeto $routeprovider. Definição de rota. Rota padrão. Executada quando o caminho da URL da aplicação não combina com nenhuma das opções definidas pela função when. Código disponível em: hzps://github.com/pkgoncalves/ngstore

Roteamento - Exemplo Rota /clientes

Roteamento - Exemplo Rota /clientes/adicionar

Roteamento Também é possível definir variáveis em uma rota. Variável id.

Roteamento Variável id.

Roteamento Para recuperar o valor de uma variável de roteamento no código do controlador utilize o objeto $routeparams. Variável id. Injeção de dependência do objeto $routeparams.

Roteamento Para usar o mecanismo de roteamento, o arquivo angular-route.js deve ser adicionado ao projeto.

Roteamento www.angularjs.org

Roteamento www.angularjs.org

Roteamento www.angularjs.org

Roteamento www.angularjs.org

Roteamento Finalmente, importar o arquivo angular-route.js na página principal da aplicação.

Services São objetos JavaScript que podem ser injetados em controladores ou outros services através do mecanismo de injeção de dependência do AngularJS. Bastante utilizado na organização e reutilização de código em aplicações AngularJS. Utilize o método factory() ou o serviço $provide para registrar seus objetos de serviço.

Service - Exemplo Seleção do módulo ao qual o serviço pertencerá. Nome do serviço. Injeção de dependência. Métodos do serviço. Código disponível em: hzps://github.com/pkgoncalves/ngstore

Service AngularJS possui muitos serviços prontos para uso. Consulte a relação completa em: https://docs.angularjs.org/api/ng/service

Como eu junto tudo isso em uma aplicação então?

Aplicação de Exemplo

Aplicação de Exemplo Utiliza Node.js como tecnologia Server Side. Node.js implementa as APIs REST e fornece a página principal da aplicação (shell) e demais elementos, como imagens, arquivos de script, CSS e etc.

Aplicação de Exemplo Web Browser Servidor Banco de Dados

Utilize qualquer plataforma server side para implementar WebServices e fornecer os elementos da sua aplicação.

Estrutura de Pastas

Estrutura de Pastas Existem várias formas de se estruturar o código em uma aplicação AngularJS. Podemos escrever todos os controladores, serviços e configurações em um único arquivo. Podemos criar um único arquivo para armazenar todos os controladores, outro para os serviços e assim por diante. Podemos separar os arquivos da aplicações em estruturas lógicas, uma pasta para controladores, outra para serviços, outra para visões e etc.

Estrutura de Pastas Existem várias formas de se estruturar o código em uma aplicação AngularJS. Podemos escrever todos os controladores, serviços e configurações e um único arquivo. Podemos criar um único arquivo para armazenar todos os controladores, outro para os serviços e assim por diante. Podemos separar os arquivos da aplicações em estruturas lógicas, uma pasta para controladores, outra para serviços, outra para visões e etc.

Estrutura de Pastas Existem várias formas de se estruturar o código em uma aplicação AngularJS. Podemos escrever todos os controladores, serviços e configurações e um único arquivo. Podemos criar um único arquivo para armazenar todos os controladores, outro para os serviços e assim por diante. Podemos separar os arquivos da aplicações em estruturas lógicas, uma pasta para controladores, outra para serviços, outra para visões e etc.

Estrutura de Pastas Existem várias formas de se estruturar o código em uma aplicação AngularJS. Podemos escrever todos os controladores, serviços e configurações e um único arquivo. Podemos criar um único arquivo para armazenar todos os controladores, outro para os serviços e assim por diante. Podemos separar os arquivos da aplicações em estruturas lógicas, uma pasta para controladores, outra para serviços, outra para visões e etc.

Estrutura de Pastas Projeto Completo Models Node.js Pastas com recursos JavaScript, CSS e fragmentos HTML. Aplicação AngularJS. Definição de rotas Node.js. Página principal da aplicação.

Estrutura de Pastas Detalhamento Controladores AngularJS. Definição do módulo principal. Definição de serviços. Fragmentos HTML (visões).

Tudo começa pela página index.

/views/index.ejs

Adicione as bibliotecas do AngularJS e demais dependências.

/views/index.ejs A inclusão da biblioteca JQuery não é obrigatória. Quando ela não é adicionada, o AngularJS utiliza uma versão embutida e simplificada do JQuery.

Inclua a diretiva ngapp na tag principal da página. Pode ser até mesmo a própria tag <html>.

/views/index.ejs O conteúdo da diretiva ng-app é de livre escolha e deve representar o nome do módulo principal da aplicação.

Crie o arquivo JavaScript que irá inicializar o módulo principal da sua aplicação.

/public/ngstore- app.js

Inclua o arquivo de definição do módulo principal da aplicação na página index.html.

/views/index.ejs As tags <script> responsáveis pelo carregamento dos controladores, serviços e demais elementos da sua aplicação, devem de preferência ser incluídos no rodapé da página. Assim o usuário terá a interface completa renderizada no browser enquanto os demais scripts são carregados.

Agora utilize a diretiva ngview para definir em qual região da página index.html as demais visões serão renderizadas quando o usuário navegar de uma página para outra.

/views/index.ejs

Visão de Cadastro de Clientes

3 elementos: Fragmento HTML de template; Controlador; Definição de roteamento (url da visão).

Arquivo de template HTML deve ser criado na pasta dedicada ao armazenamento de visões na aplicação.

/public/app/views/cliente- edit.html

Repare na diretiva ng- model no elemento <input>. Ela faz a ligação (data binding) entre um objeto no controlador e os elementos de um formulário. Alterações no formulário alteram o modelo e vice-versa, automaticamente.

Após implementado o template, devemos criar o controlador responsável pelos dados e ações da página.

/public/app/controllers/clienteeditcontroller.js

Alguns métodos de ações do controlador estão ligados ao template através da diretiva ng-click.

Importe o arquivo JavaScript do controlador na página principal da aplicação.

Devemos agora criar um roteamento para permitir que o usuário navegue para o formulário de cadastro de clientes. O roteamento também define qual controlador estará relacionado ao template da visão.

/public/app/ngstore- app.js Não se esqueça de injetar o serviço routeprovider. Necessário para definir os roteamentos. Arquivo de template. Controlador. O roteamento deve ser definido na configuração do módulo principal da aplicação ou de um submódulo da aplicação.

A navegação para a visão de cadastro de clientes pode ser feita através do elemento <a> do HTML. <a href= #/clientes/adicionar >Novo Cliente</a> O símbolo # é necessário antes do caminho da rota, caso contrário, o navegador irá buscar uma página completa no caminho /clientes/adicionar.

É possível utilizar rotas sem o uso de hashbangs. Para isso utilize o serviço $locationprovider, passando o valor true para o método html5mode. angular.module('storeapp, [ locationprovider ]).config(['$locationprovider', function ($routeprovider) { }]); $locationprovider.html5mode(true);

Código da Aplicação de Exemplo Disponível no GitHub em: https://github.com/pkgoncalves/ngstore

Patrick Augusto Gonçalves pkgoncalves@gmail.com

Obrigado!