SlideShare une entreprise Scribd logo
1  sur  68
Aprendendo Na Prática: Aplicativos
Web com HTML5, Angular.js, Twitter
Bootstrap e Node.js
Tags: Node.js, HTML5, Angular.js e Twitter Bootstrap
Apresentação
Um pouco sobre mim
 Daniel Souza Makiyama
 E-mail: daniel.makiyama@gmail.com
 Graduado em Ciência da Computação pela FEI;
 Cursando Mestrado em Ciência da Computação pela UFABC;
 Microsoft Certified Professional (Desenvolvimento Web em ASP.NET 4.5);
 Sócio-Fundador da Donuts4u Desenvolvimento e Comunicação Via Web.
Um pouco sobre você
 Qual é o seu nome?
 Qual sua experiência profissional?
 Qual é a sua experiência com desenvolvimento web?
 O que você espera aprender no curso de Aplicativos Web com
HTML5, Angular.js, Twitter Bootstrap e Node.js?
Plano de Curso
 O futuro da Web
 Interface de usuário também é
coisa de programador
 Sopa de Frameworks
 Por onde Começar?
 Instalando o Node.js
 Instalando a IDE ATOM
 Hello Node!
 O prompt de comando
 Instalando o Angular.Js
 Hello Angular!
 Instalando o Twitter Bootstrap
 Testes com o Bootstrap
 Instalando o GIT
Plano de Curso
 Aplicação PhoneCat
(fonte: tutorial do site angularjs.org)
 Template Estático
 Templates Angular
 Filtrando Repetidores
 Vinculação dupla de dados
 XHRs e Injeção de Dependências
 Links de Template e Imagens
 Rotas e Visões Múltiplas
 Mais templates
 Filtros
 Tratador de Eventos
 REST e Serviços Customizados
 Animações
 Participação em Pesquisa: Base
de Conhecimento de Frameworks
Web
 Pesquisa Qualitativa: Impressões
e Feedback
Motivação / Oportunidade
 Javascript é a linguagem
com maior demanda atual
no mercado;
 Bolsas de iniciação
científica:
 Arquiteturas e Frameworks
Web
 Pesquisa sobre arquiteturas e
frameworks da internet e suas
aplicações;
fonte: linguagem vs salário / demanda (http://tinyurl.com/ppbu65x acessado em 05/01/2014)
(pesquisa realizada de Janeiro à Junho de 2014 nos Estados Unidos,
Grã-Bretanha e Austrália
Qual é o futuro da web?
fonte: Application Foundations for The Open Web Platform (http://tinyurl.com/nnxbt4x acessado em 05/01/2014)
 Experiência única em qualquer contexto;
 Integração total entre dispositivos;
 Modularização e reuso de interfaces;
 Mídias e comunicação em tempo real;
 Maior usabilidade e acessibilidade;
 Novos serviços de api aberta;
 Segurança e privacidade;
Interface de Usuário também é coisa de
Programador
Estrutura
Organização Testes
Modularização
com o aumento da
complexidade, como
gerenciar a qualidade?
AutomaçãoCodificação
Sopa de Frameworks
fonte: Javascript The Right Way (http://jstherightway.org/ acessado em 05/01/2015)
...e isso não representa nem a metade
dos frameworks disponíveis!
Por onde começar?
+ +
Instalando o Node.js
http://nodejs.org/download/
Windows Installer (.msi) 32-bit
Instalando a IDE Atom
https://atom.io/
Windows Installer para Windows 7
(o Atom não precisa de instalação)
Hello Node!
 Inicialmente crie em seudiretoriohellonode um arquivo entitulado hello.js;
 Abra o Atom e arraste o arquivo hello.js vazio para o mesmo;
 Implemente o seguinte código no arquivo e salve;
O prompt de comando
 Localize no menu iniciar o ‘node.js command
prompt’, abra o programa;
 Navegue até a pasta do arquivo hello.js e digite
‘node hello.js’ para iniciar o servidor web node.js;
 Verifique a mensagem ‘Servidor executando em
http://127.0.0.1:8000/
O prompt de comando
 Abra o navegador de sua preferência e digite
http://127.0.0.1:8000/ . Você verá a mensagem:
Hello Node!
 Voltem ao prompt de comando e digitem ctrl+c
para parar o servidor;
Instalando o Angular.js
 Digite ‘npm install angular’ para instalar o
angular.js na sua pasta (existem outras maneiras
de instalar o angular);
 O comando copia os arquivos da última versão do
angular.js para o diretório node_modules/angular/
fonte: NPM (https://www.npmjs.com/package/angular acessado em 05/01/2015)
Hello Angular!
 Crie um arquivo com o nome
index.html na pasta
helloangular;
 Abra o Atom e arraste o arquivo
index.html recém criado para o
mesmo;
 Implemente o código ao lado no
arquivo e salve;
fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
Hello Angular!
 Abra o prompt de comando do
node.js, navegue até a pasta
helloangular e digite o comando
‘npm install http-server –g’ para
instalar o servidor http-server
globalmente;
 Inicialize o servidor digitando
http-server –a 0.0.0.0 –p 8000;
fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
Hello Angular!
 Abra o navegador de sua preferência e digite
http://localhost:8000/ . Você verá um campo
de texto e uma mensagem ‘Hello’;
 Digite qualquer texto na caixa de texto e
automaticamente o texto é exibido no <h2>
(no exemplo ao lado digitamos ‘Angular!!!!’);
 Volte ao prompt de comando e digite ctrl+c
para parar o servidor;
fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
Instalando o Twitter Bootstrap
 Vamos utilizar o Yeoman para instalar o
bootstrap(existem outras maneiras de instalar
o bootstrap). Digite ‘npm install -g yo’ para
instalar o bootstrap globalmente;
 Digite ‘yo webapp’ para criar uma nova
aplicação web;
 Mantenha a opção padrão ‘Bootstrap’ e
pressione a tecla <espaço>. O gerador
Yeoman criará diversos arquivos básicos
para uma aplicação web (demora um
pouquinho);
fonte: webapp (https://github.com/yeoman/generator-webapp acessado em 05/01/2015)
Instalando o Twitter Bootstrap
 Vamos verificar a estrutura criada pelo
gerador, começando pela raiz;
 Package.json => pacotes npm
 devDependencies => referências;
 engines => versão do node.js e/ou npm;
 Gruntfile.js => executador de tarefas
 serve => inicializa servidor, injeta dependências
(bower), auto-prefixos de css, auto-refresh;
fonte: gruntjs (http://gruntjs.com/ acessado em 05/01/2015)
...
Instalando o Twitter Bootstrap
 Bower.json => dependências de front-end;
 .yo-rc.json => configurações Yeoman;
 .jshintrc => configurações jshintrc;
 .gitignore => pastas/extensões a serem
ignorado(a)s no commit;
 .gitattributes => atributos dos arquivos a serem
comitados, por caminho;
 .editorconfig => configurações para IDEs;
 .bowerrc => configurações do bower;
fonte: bower (http://bower.io/ acessado em 05/01/2015)
Instalando o Twitter Bootstrap
 testspec => pasta de testes;
 test.js => implementação de testes;
 Implemente o código ao lado no arquivo e
salve;
 Acesse o prompt de comando e execute o
comando ‘grunt test’ para rodar o teste
implementado;
fonte: mocha (http://mochajs.org/ acessado em 05/01/2015)
Instalando o Twitter Bootstrap
 app => pasta da aplicação;
 index.html => página inicial da aplicação;
 Acesse o prompt de comando e execute o
comando ‘grunt serve’ para inicializar o
servidor. Automaticamente a página inicial da
aplicação é apresentada no navegador;
fonte: gruntjs (http://gruntjs.com/ acessado em 05/01/2015)
Testes com o Bootstrap
fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
>>
 pratique: crie uma table com class
table e table-striped e veja o
resultado.
 foi possível verificar o livereload?
Instalando o GIT
fonte: git (http://git-scm.com/ acessado em 05/01/2015)
http://git-scm.com/download/
Windows Installer
Recapitulando
Aula anterior. Objetivo: existem inúmeras
possíveis configurações de projetos web
Framework de padrões para
desenvolvimento mobile-first
Executador de Tarefas, automatiza
atividades manuais envolvendo diversos
pacotes
Framework para criação e execução de
testes Javascript
Ferramenta geradora de código (facilita a
construção de código)
Aula de hoje: Projeto Phonecat:
Estrutura básica recomendada pelo
site do AngularJS.org
Gestores de pacotes
O que é o Angular.js?
O HTML é mestre em lidar com conteúdo estático, mas ainda
falha no dinamismo.
AngularJS permite extender o vocabulário do HTML para sua
aplicação. O ambiente resultante é expressivo, fácil de usar e
rápido de desenvolver.
fonte: git (http://todomvc.com/examples/angularjs/#/ acessado em 05/01/2015)
Ajustes Possíveis Problemas de Permissão e
tamanho do caminho dos pacotes npm
Apagar sua pasta, criar novamente ex: c:dsm e criar a pasta c:npm
Abrir o notepad como administrador;
Acessar o arquivo npmrc em : C:program
filesnodejsnode_modulesnpm e colocar: prefix=c:npm e salvar;
Navegar até o diretório do seu projeto cd dsm, baixar o projeto do GIT git
clone --depth=14 https://github.com/angular/angular-phonecat.git;
Abrir o console na pasta do projeto (angular-phonecat) e rodar git
config --global url.”https://”.insteadOf git:// ;
Aplicação PhoneCat
 Abra o prompt de comando e clone o
repositório do tutorial ‘git clone --
depth=14
https://github.com/angular/angular-
phonecat.git’
 Navegue no prompt até a pasta
angular-phonecat recém criada e
execute ‘npm install’ para instalar todas
as ferramentas especificadas no
arquivo package.json;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat
 Digite o comando ‘npm start’ para iniciar o
servidor na porta 8000 (como definido no
arquivo packages.json;
 O servidor apresenta como diretório raiz a
pasta phonecatangular-phonecat. Clique na
pasta ‘app’ para acessar a aplicação;
 Navegue um pouco na aplicação. É um
catálogo de smartphones;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat
 Reinicie o Atom e arraste o arquivo
package.json do dir. angular-phonecat
para ele. O projeto angular-phonecat será
aberto no Atom;
 Abra um novo console, acesse a pasta da
aplicação e digite ‘npm test’ para rodar os
testes. Os testes unitários executados
estão presentes no diretório angular-
phonecattestunit;
 gere um erro no teste it(‘should fetch
phone detail’... e verifique se o console de
teste é atualizado;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat
 Pare o processo automático de testes com
ctrl+c e ‘S’. Execute o comando ‘git
checkout –f step-0’ para voltar o projeto ao
step-0 do tutorial;
 Como o servidor ainda está rodando em
outro console acesse localhost:8000/,
clique no diretório app. Na página dê
ctrl+F5 para eliminar cache. Aparecerá
página com ‘Nothing here yet’;
 No Atom abra o arquivo app/index.html e
verifique as funções do angular na página;
 multiplicar 3 inputs HTML. O que ocorre
antes do preenchimento, e depois?
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Angular
Aplicação PhoneCat
 O ng-app ativa o injetor do angular, responsável
pela injeção de dependências. O injetor também
cria o escopo raiz, contexto para o modelo da
aplicação;
 Angular compila o modelo de objetos do
documento html (DOM) e processa as
expressões;
 Ao receber ações do usuário, Angular verifica
modificações no modelo, caso existam, Angular
executa novamente os vínculos afetados;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
ng-app escopo raiz
template html
expressões (vínculos)
Ação usuário (mouse, teclado)
visão
modelo
modifica
Aplicação PhoneCat – template estático
 Execute o comando ‘git checkout –f step-1’
para ir ao step-1 do tutorial;
 Localize e abra o arquivo appindex.html e
verifique o conteúdo estático incluído;
 transforme o conteúdo dos itens nas tags
<details> e <summary> do HTML5.
Informe a class ‘nav nav-pills’ na <ul>.
Finalize apresentando o total de telefones
usando a tag <div> com class ‘alert alert-
info’;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – templates angular
 Execute o comando ‘git checkout –f step-2’
para ir ao step-2 do tutorial. Acesse o
arquivo app/index.html;
 ng-app define o módulo phonecatApp que
possui o controller PhoneListCtrl;
 ng-controller permite anexar o controller
PhoneListCtrl à tag <body>. O modelo é
definido no controller;
 ng-repeat permite o loop dos itens do
modelo de acordo com o template
especificado dentro da <li> com os
vínculos {{phone.name}} e
{{phone.snippet}};
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – templates angular
 Acesse o arquivo app/js/controllers.js;
 angular.module define o módulo phonecatApp, sem
dependências ‘[]’ e atribui à variável phonecatApp;
 phonecatApp define o controller ‘PhoneListCtrl’;
 PhoneListCtrl anexa os dados dos smartphones ao
escopo ($scope), atribuindo os mesmos à variável
‘phones’;
 Este escopo está definido a todos os vínculos localizados
dentro da tag de <body>, onde a diretiva ng-
controller=“PhoneListCtrl” é definida;
 Graças ao escopo, a visão e o modelo estão sempre
sincronizados: http://plnkr.co/edit/zZfUQN?p=preview;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – templates angular
 Acesse o arquivo test/unit/controllersSpec.js;
 testes unitários do controller ‘PhoneListCtrl’;
 beforeEach => inicializa módulo ‘phonecatApp’ antes da
execução dos testes;
 it => define cada teste;
 inject => injeta o serviço controller no teste, que permite
obter o controller pelo nome;
 O escopo é mock (simula o comportamento do objeto real
neste contexto);
 A verificação é feita através da função expect do
framework jasmine;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – templates angular
 Abra o console na pasta do projeto e execute
‘npm test’. O único teste será executado com
sucesso;
 Crie uma nova variável no arquivo de
app/js/controller.js chamada ‘itemName’ com
nome ‘Lista de Telefones’;
 Na página app/index.html crie uma <h2> que
apresente a mensagem ‘Olá Lista de Telefones’
com a variável ‘itemName’;
 Crie um novo teste para verificar se a variável
‘itemName’ está preenchida corretamente no
controller: expect(scope.itemName).toBe(‘Lista
de Telefones’);
 Crie uma tabela conforme a imagem ao lado e
corrija o código para apresentar os números
multiplicados por 2, por linha;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – filtrando repetidores
 Execute o comando ‘git checkout –f step-3’ para
ir ao step-3 do tutorial. Acesse o arquivo
app/index.html;
 Verifique na index.html que foi incluído um input
com nome query e a sentença ‘| filter:query’ no
repetidor;
 Vinculação: no carregamento da página a
variável query do input é ligada ao modelo, ou
seja, ao escopo do controller ‘PhoneListCtrl’;
 Devido à sintaxe ‘filter:query’ no repetidor,
qualquer alteração na variável ‘query’ faz com
que o repetidor atualize o DOM para refletir as
mudanças;
 crie uma variável chamada query no controller
PhoneListCtrl e preencha com o valor ‘Nex’;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Index.html
Escopo do PhoneListCtrl
query
phones
Aplicação PhoneCat – filtrando repetidores
 A função ’filter’ utiliza a variável ‘query’ para criar
um novo array com itens que contém este
conteúdo. O filtro verifica o conteúdo em todas
as propriedades de cada item do array;
 busque pela palavra ‘next’ e ‘motorola’ comprove
que a busca varre não só a variável ‘name’, mas
também a propriedade ‘snippet’;
 A função ‘filter’ possui diversas opções:
 troque a variável query por um objeto com
{name: query}. Coloque uma negação em query
(‘!’) e veja o resultado;
 substitua a variável query pela função
filterName, implemente a função no controller e
teste. A função deve filtrar pela propriedade
snippet;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
a função é executada n vezes, para cada item do array, em cada
execução, o item do array é passado como primeiro parâmetro (item)
dica...
dica...
Aplicação PhoneCat – filtrando repetidores
 Acesse o arquivo em teste2escenarios.js .
Neste arquivo está a implementação de um teste
de integração que verifica a funcionalidade de
filtro;
 Para executá-lo, abra o prompt de comando,
navegue até a pasta do projeto e digite o
comando: ‘npm run protractor’. O navegador é
aberto automaticamente e é possível visualizar o
teste sendo executado;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – filtrando repetidores
 Coloque a variável {{query}} no <title> antes de
‘Google Phone Gallery’;
 Crie um teste integrado conforme a imagem ao
lado; Veja que o valor não aparece pois a tag
<title> não está na região definida pelo escopo
do controller ‘PhoneListCtrl’ (<body>);
 Mova o ng-controller=‘PhoneListCtrl’ para a tag
<html> e verifique novamente a página;
 Para evitar mostrar {{query}} poucos
milisegundos após o carregamento da página,
utilize ng-bind-template;
 Com o protector o modelo do Angular e o DOM
da aplicação fica acessível através da
propriedade ‘element’. Crie um <h3> na
app/index.html e inclua a variável {{query}} nele.
Crie um teste integrado para verificar se o valor
da query está presente no <h3>;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
dica...
Aplicação PhoneCat – vinculação dupla de dados
 Execute o comando ‘git checkout –f step-4’ para
ir ao step-4 do tutorial. Acesse o arquivo
app/index.html;
 Neste step foi incluído um combobox com
propriedade ‘orderProp’;
 No filtro foi incluído ‘orderBy:orderProp’ ao filtro.
Este encadeamento permitirá que, além de filtrar,
o resultado do filtro também seja ordenado;
 No controller, a propriedade ‘age’ também foi
adicionada ao array de telefones;
 O valor padrão do campo de ordenação é ‘age’;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – vinculação dupla de dados
 Foi incluído teste unitário para a nova variável.
Verifique o status da sua console de testes
unitários (npm test);
 Foi incluído teste de integração que verifica a
ordenação. Lembrando que no momento ainda
não estamos utilizando dados remotos, portanto
não é possível preencher o array de telefones
com dados de teste para implementar o teste
integrado. Rode os testes (npm run protractor);
 Reverta a ordenação adicionando um ‘-’ antes
dos valores do combobox. Porque apareceu uma
opção vazia no combobox?
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
objeto
Aplicação PhoneCat – xhr e injeção de dependências
 Execute o comando ‘git checkout –f step-5’ para
ir ao step-5 do tutorial. Acesse o arquivo
app/phones/phones.json. Este arquivo possui
uma lista de telefones no formato JSON;
 Abra o arquivo app/js/controllers.js. $http é um
serviço do Angular que permite realizar
requisições HTTP. Serviços são injetados no
controllers;
 Uma requisição ‘get’ retorna um objeto ‘promise’
(compromisso) com um método ‘success’, desta
forma é possível tratar a resposta assíncrona;
 Não é necessário fazer parse do json;
 Serviços do Angular possuem prefixo ‘$’. Por
questões de minificação, o nome dos serviços é
apresentado no formato string;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
injetor
serviços
$http
$scope
...
fábricas instâncias
Aplicação PhoneCat – xhr e injeção de dependências
 Acesse o arquivo test/unit/controllersSpec.js. O
método ‘inject’ é utilizado para injetar instâncias
dos serviços $rootScope, $controller e
$httpBackend na função beforeEach do Jasmine
(isolamento);
 Neste método o escopo é inicializado e o
httpBackend é ‘mockado’, ou seja, é definido o
retorno esperado para a url acessada no
controller;
 Adicione uma tag <pre>{{phones | filter:query |
orderBy:orderProp | json}}</pre> para visualizar
os telefones em formato JSON;
 No callback do carregamento dos telefones,
limite o número de telefones a um único item
(use o método splice). Arrume o teste unitário;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Links de Template e Imagens
 Execute o comando ‘git checkout –f step-6’ para
ir ao step-6 do tutorial. Acesse o arquivo
app/index.html e verifique os links da lista de
telefones ‘#/phones/{{phone.id}}’;
 Porque no caso da tag img utilizamos ng-src ao
invés de colocar as 2 chaves ‘{{}}’?
 Abra o arquivo test/e2e/scenarios.js e verifique o
novo teste criado. Execute o teste ‘npm run
protractor’;
 Substitua o ‘ng-src’ por um ‘src’ comum. Verifique
as requisições na ferramenta de desenvolvedor
do Chrome;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Rotas e Visões Múltiplas
 Execute o comando ‘git checkout –f step-7’ para
ir ao step-7 do tutorial. Acesse o arquivo
bower.json e verifique que foi incluído a
dependência “angular-route”. Rode ‘npm install’;
 Inclua um link ‘<a href="#/phones">voltar</a>’ na
página app/partials/phone-detail.html. Navegue
na aplicação e verifique que o link no navegador
muda, mas a página não dá refresh;
 Na função de config são definidos os
‘provedores’ de cada serviço, onde é possível
controlar a criação e comportamento em tempo
de execução do serviço;
 Abra o arquivo app/js/app.js. Veja que o módulo
ngRoute e o módulo phonecatControllers são
definidos como dependências do módulo da
aplicação;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
objeto
injetor
serviços
$route
...
instâncias
$routeProvider
atalhos: factory, value
providers
O script precisa ser incluído no template layout <=
$route service
Aplicação PhoneCat – Rotas e Visões Múltiplas
 Abra o app/index.html. Com o serviço de rotas, a
URL e o ng-view ficam vinculados.
 Voltando ao arquivo app/js/app.js, verifique que
caso o link seja ‘/phones’, o ng-view renderiza
‘partials/phone-list.html’, caso o link seja
‘phones/:phoneId’, o ng-view renderiza
‘partials/phone-detail.html’;
 O provedor de rotas é injetado no método de
configuração e as rotas são definidas no método
‘when’ do provider;
 Note a rota ‘/phones/:phoneId’, informações
precedidas por ‘:’ são extraídas da URL e
agregadas ao parâmetro $routeParams
disponível no controller;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Index.html
ngView
$routeProvider
Index.html
Aplicação PhoneCat – Rotas e Visões Múltiplas
 Abra o arquivo app/js/controllers.js. Note que foi
criado um módulo chamado
‘phonecatControllers’ para armazenar os dois
controllers;
 No controller ‘PhoneDetailCtrl’ é injetado o objeto
‘$routeParams’ que possui a propriedade
‘phoneId’ obtida via rota => querystring;
 Acesse o arquivo de testes de integração.
Entenda e execute os testes (npm run
protractor). Em ‘should display placeholder...’,
troque ‘by.binding’ por ‘by.model’, porque não
funciona?
 Inclua ‘{{orderProp}}’ em app/index.html;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Mais templates
 Execute o comando ‘git checkout –f step-8’ para
ir ao step-8 do tutorial. Na pasta app/phones/ é
possível verificar além do arquivo phones.json
outros arquivos, um para cada modelo de
telefone com detalhes em formato json;
 Abra o arquivo ‘app/js/controllers.js’ e no
controller ‘PhoneDetailCtrl’ verifique a requisição
aos arquivos com detalhes dos telefones;
 Abra o arquivo ‘app/partials/phone-detail.html’.
Veja que não é mais necessário especificar o ng-
controller. O mesmo é vinculado ao template
através da rota;
 Abra o arquivo ‘test/unit/controllersSpec.js’ e
verifique novos testes para a visão de detalhes;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Mais templates
 Abra o arquivo ‘test/unit/controllersSpec.js’ e
verifique novos testes para a visão de detalhes.
Retire a linha que atribui valor para ‘phoneId’ e
execute o teste;
 Abra o arquivo ‘test/e2e/scenarios.js’ e verifique
o teste ‘should display nexus-s page’;
 Escreva um teste integrado que verifique que
são apresentadas 4 thumbnails na página de
detalhes do ‘Nexus S’;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Filtros Customizados
 Execute o comando ‘git checkout –f step-9’ para
ir ao step-9 do tutorial.
 Abra o arquivo ‘app/js/filters.js’, verifique o filtro
‘checkmark’ que a partir de uma variável
booleana apresenta o caracter ✓ para verdadeiro
ou ✘para falso. Este arquivo deve ser incluído
na index.html para que funcione;
 Abra o arquivo ‘app/partials/phone-detail.html’ e
veja o filtro customizado aplicado à 2 variáveis;
 Abra o arquivo ‘test/unit/filtersSpec.js’ e verifique
as injeções de dependência. No caso de filtros, o
sufixo ‘Filter’ deve ser adicionado ao nome do
filtro quando injetado;
 No arquivo ‘app/partials/phone-detail.html’,
experimente filtros como: uppercase, limitTo(
você pode encadear filtros);
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Filtros Customizados
 Execute o comando ‘git checkout –f step-10’ para
ir ao step-10 do tutorial.
 Abra o arquivo ‘app/js/controllers.js’. A função
tratadora de eventos ‘setImage’ altera o valor da
propriedade ‘mainImageUrl’;
 Abra o arquivo ‘app/partials/phone-detail.html’ e
verifique o atributo ‘ng-click’ que utiliza a função
‘setImage’ para tratar o evento de clique nas
imagens;
 Abra o arquivo ‘test/e2e/scenarios.js’ e verifique
dois novos métodos que verificam este
mecanismo recém implementado;
 Abra o arquivo ‘test/unit/controllersSpec.js’ e veja
a nova função ‘xyzPhoneData’. Retire o item
‘images’ e veja o teste falhar. Porque? Teste o
funcionamento do ‘ng-mouseover’;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Rest
 Execute o comando ‘git checkout –f step-11’ para
ir ao step-11 do tutorial. Abra o arquivo
bower.json e veja a nova referência
‘ngResource’(implementação RESTful);
 Abra o arquivo ‘app/js/services.js’ onde foi
implementado o serviço de acesso a dados dos
telefones;
 Abra o arquivo ‘app/js/app.js’ e visualize a nova
dependência: ‘phonecatServices’;
 Abra o arquivo ‘app/js/controllers.js’ e verifique
os controllers ainda mais simplificados e sem
dependência do serviço $http;
 Verifique as alterações nos testes unitários
(referências, código e funções usadas), ex:
toEqualData;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
O script precisa ser incluído no template layout <=
Aplicação PhoneCat – Aplicando Animações
 Execute o comando ‘git checkout –f step-12’ para
ir ao step-12 do tutorial, Abra o arquivo
bower.json: jquery e ng-animate serão utilizados;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
O script precisa ser incluído no template layout <=
Muitas animações podem ser feitas em CSS3, mas coisas mais complexas precisam de Javascript. Para
entender animações em Angular é necessário primeiro entender ‘transitions’ em HTML5:
http://www.w3schools.com/css/tryit.asp?filename=trycss3_transition1
Transições também funcionam quando novas classes são incluídas via javascript:
http://jsfiddle.net/makiyamad/c7zsvyuo/6/
Transições funcionam toda vez que a(s) propriedade(s) monitorada(s) é(são) alterada(s), não
necessariamente porque uma classe foi alterada no elemento em questão:
http://jsfiddle.net/makiyamad/4s3posav/1/
Aplicação PhoneCat – Aplicando Animações
 Veja o passo a passo de uma animação de ‘hide’
: https://docs.angularjs.org/guide/animations .
Veja o css utilizado:
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Aplicando Animações
 Abra o arquivo ‘app/partials/phone-list.html’, veja
a classe ‘phone-listing’ que foi adicionada ao
<li>;
 Abra o arquivo ‘app/css/animations.css’. No caso
de animações no ng-repeat:
 ng-enter aplicado quando um novo item é adicionado à
lista e renderizado na página;
 ng-move aplicado quando o item é movido na lista;
 ng-leave aplicado quando o item é removido da lista;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
este css define que nos 3
tipos de transições deve ser
executada uma animação
ex: o estado ng-leave é o
estado de animação
iniciada e o ng-enter-active
marca o estado final da
animação;
Aplicação PhoneCat – Aplicando Animações
 Para simular o funcionamento inclua o serviço
$interval no controller PhoneListCtrl, aumente o
tempo da animação no css para 5 segundos e com
a ferramenta do desenvolvedor abra o console e
monitore.
 Você verá algo semelhante à imagem abaixo, que
comprova que a sequência ng-enter > ng-enter-
active ou ng-leave > ng-leave-active é executada
antes de mostrar ou remover um elemento de um
repeater;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Aplicando Animações
 Também é possível realizar animações com
keyframe CSS3;
 A animação é definida através da cláusula
‘@keyframes’ e utilizada na classe através do
atributo ‘animation’;
 Para verificar esta animação clique em um
telefone na página principal de telefones, você
verá o efeito de fade-out e fade-in.
 Na tela de detalhes de um telefone, clique na
seta de voltar do próprio navegador. É
impressionante verificar o fade-out e fade-in
também é executado e não há refresh;
 Inclua o link voltar no phone-details.html, veja a
mesma animação ao clicar nele;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
Aplicação PhoneCat – Aplicando Animações
 Abra o arquivo ‘app/js/animations.js’, veja que foi
criada uma animação para a classe ‘.phone’;
 A animação animateup é disparada quando a
classe active é adicionada nos elementos com
classe phone;
 A animação animatedown é disparada quando a
classe active é removida dos elementos com
classe phone;
fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
-
active
active
-
-500
+ 0
+ 500
-500
+ 0
+ 500
active
-
-500
+ 0
+ 500
animateup
animatedown
Base de Conhecimento de Frameworks Web
Engenharia de Software
Arquitetura Web;
Método : programação
e técnicas de IHC;
Base de Conhecimento de Frameworks Web
Questão da Pesquisa
Grande volume de
frameworks web;
 Curva de aprendizagem:
vale a pena?
 Como classificar os
frameworks web e
promover o conhecimento?
 Como tornar o processo de
seleção mais pragmático?
Base de Conhecimento de Frameworks Web
Objetivo
Classificar frameworks web e criar uma base
e conhecimento para a tomada de decisão;
Base de Conhecimento de Frameworks Web
Como participar?
Motivação
 Hands-On : IHC e Estudo de Diversos Frameworks Web;
 Caso tenha interesse deixe seu e-mail comigo;
Dúvidas
?

Contenu connexe

Tendances

Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UICleiton Francisco
 
Material Design simples e rapido com AngularJS
Material Design simples e rapido com AngularJSMaterial Design simples e rapido com AngularJS
Material Design simples e rapido com AngularJSHenrique Limas
 
ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?Douglas Aguiar
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
Apresentação AngularJS - Angular UI
Apresentação AngularJS - Angular UIApresentação AngularJS - Angular UI
Apresentação AngularJS - Angular UICecília Rosa
 
ASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCguest489a65e
 
Introdução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webIntrodução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webRodrigo Branas
 
ASP .NET MVC na Prática - C. Augusto Proiete
ASP .NET MVC na Prática - C. Augusto ProieteASP .NET MVC na Prática - C. Augusto Proiete
ASP .NET MVC na Prática - C. Augusto ProieteComunidade NetPonto
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJSRodrigo Branas
 
O futuro dos WebApps com AngularJS 2.0
O futuro dos WebApps com AngularJS 2.0O futuro dos WebApps com AngularJS 2.0
O futuro dos WebApps com AngularJS 2.0Wilson Mendes
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"Stefan Horochovec
 
AngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideAngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideSergio Azevedo
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 

Tendances (20)

Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
React - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UIReact - Biblioteca Javascript para criação de UI
React - Biblioteca Javascript para criação de UI
 
Material Design simples e rapido com AngularJS
Material Design simples e rapido com AngularJSMaterial Design simples e rapido com AngularJS
Material Design simples e rapido com AngularJS
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Desenvolviemento web com ASP.Net e MVC
Desenvolviemento web com ASP.Net e MVCDesenvolviemento web com ASP.Net e MVC
Desenvolviemento web com ASP.Net e MVC
 
Introdução ao AngularJS!
Introdução ao AngularJS!Introdução ao AngularJS!
Introdução ao AngularJS!
 
ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?ASP .NET MVC - Você esta pronto para a pílula vermelha?
ASP .NET MVC - Você esta pronto para a pílula vermelha?
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Apresentação AngularJS - Angular UI
Apresentação AngularJS - Angular UIApresentação AngularJS - Angular UI
Apresentação AngularJS - Angular UI
 
ASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVCASP.NET Web Forms X ASP.NET MVC
ASP.NET Web Forms X ASP.NET MVC
 
Introdução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações webIntrodução ao desenvolvimento de aplicações web
Introdução ao desenvolvimento de aplicações web
 
ASP .NET MVC na Prática - C. Augusto Proiete
ASP .NET MVC na Prática - C. Augusto ProieteASP .NET MVC na Prática - C. Augusto Proiete
ASP .NET MVC na Prática - C. Augusto Proiete
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Javascript para adultos
Javascript para adultosJavascript para adultos
Javascript para adultos
 
Introdução ao AngularJS
Introdução ao AngularJSIntrodução ao AngularJS
Introdução ao AngularJS
 
O futuro dos WebApps com AngularJS 2.0
O futuro dos WebApps com AngularJS 2.0O futuro dos WebApps com AngularJS 2.0
O futuro dos WebApps com AngularJS 2.0
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"
 
AngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideAngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-Side
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 

En vedette

Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicCurso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicFelipe Blini
 
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Rafael Chiavegatto
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsLocaweb
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C# Thiago Vidal
 
Como a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando PessoasComo a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando PessoasMarlon Luz
 
O GRUPO .NET CODERS - ERICK WENDEL
O GRUPO .NET CODERS - ERICK WENDELO GRUPO .NET CODERS - ERICK WENDEL
O GRUPO .NET CODERS - ERICK WENDELErick Wendel
 
Desenvolvimento de Malwares com C#
Desenvolvimento de Malwares com C# Desenvolvimento de Malwares com C#
Desenvolvimento de Malwares com C# Erick Wendel
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasMarcelo Charan
 
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016JS - Ferramentas Code Analysis e Fixed para JS - TDC2016
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016Erick Wendel
 
Desenvolvendo BOTs com Telegram e Javascript - TDC2016
Desenvolvendo BOTs com Telegram e Javascript - TDC2016Desenvolvendo BOTs com Telegram e Javascript - TDC2016
Desenvolvendo BOTs com Telegram e Javascript - TDC2016Erick Wendel
 
Mini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelMini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelErick Wendel
 
Redes 1 - Sockets em C#
Redes 1 - Sockets em C#Redes 1 - Sockets em C#
Redes 1 - Sockets em C#Marcelo Charan
 
Angular js com diretivas
Angular js com diretivasAngular js com diretivas
Angular js com diretivasMatheus Lima
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5Intel Software Brasil
 

En vedette (20)

Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e IonicCurso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
 
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
Automatização de testes funcionais em dispositivos móveis utilizando a técnic...
 
TDDing com Javascript
TDDing com JavascriptTDDing com Javascript
TDDing com Javascript
 
Testes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJsTestes utilizando cucumber + PhantomJs
Testes utilizando cucumber + PhantomJs
 
Palestra: LINQ via C#
Palestra: LINQ via C# Palestra: LINQ via C#
Palestra: LINQ via C#
 
Como a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando PessoasComo a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando Pessoas
 
Angular js
Angular jsAngular js
Angular js
 
O GRUPO .NET CODERS - ERICK WENDEL
O GRUPO .NET CODERS - ERICK WENDELO GRUPO .NET CODERS - ERICK WENDEL
O GRUPO .NET CODERS - ERICK WENDEL
 
Desenvolvimento de Malwares com C#
Desenvolvimento de Malwares com C# Desenvolvimento de Malwares com C#
Desenvolvimento de Malwares com C#
 
Redes I - Conceitos e Tecnologias
Redes I - Conceitos e TecnologiasRedes I - Conceitos e Tecnologias
Redes I - Conceitos e Tecnologias
 
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016JS - Ferramentas Code Analysis e Fixed para JS - TDC2016
JS - Ferramentas Code Analysis e Fixed para JS - TDC2016
 
Desenvolvendo BOTs com Telegram e Javascript - TDC2016
Desenvolvendo BOTs com Telegram e Javascript - TDC2016Desenvolvendo BOTs com Telegram e Javascript - TDC2016
Desenvolvendo BOTs com Telegram e Javascript - TDC2016
 
Mini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick WendelMini Curso - WebScraping com C# - Erick Wendel
Mini Curso - WebScraping com C# - Erick Wendel
 
Estrutura de dados 2
Estrutura de dados 2Estrutura de dados 2
Estrutura de dados 2
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Redes 1 - Sockets em C#
Redes 1 - Sockets em C#Redes 1 - Sockets em C#
Redes 1 - Sockets em C#
 
Criando Apps Sociais em Android
Criando Apps Sociais em AndroidCriando Apps Sociais em Android
Criando Apps Sociais em Android
 
Angular js com diretivas
Angular js com diretivasAngular js com diretivas
Angular js com diretivas
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5
Desenvolvimento Apps multiplataforma para dispositivos móveis usando HTML5
 

Similaire à Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstrap e Node.js

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 DorAllyson Barros
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
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 AngularElmano Cavalcanti
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1michellobo
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao androidMessias Batista
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Renato Groff
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Renato Groff
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o NodejsCaio Cutrim
 
Quasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenhoQuasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenhoPatrick Monteiro
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPFabio Godoy
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Renato Groff
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Getúlio Strapazzon
 
Preparar o ambiente para desenvolvimento angular
Preparar o ambiente para desenvolvimento angularPreparar o ambiente para desenvolvimento angular
Preparar o ambiente para desenvolvimento angularNize Costa
 

Similaire à Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstrap e Node.js (20)

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
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Cake Php
Cake PhpCake Php
Cake Php
 
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
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
Rio Info 2010 - Oficina - Oficina Papel Devigner Novidades HTML5 - Ricardo Pa...
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1
 
2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android2017 08-11 - Androidos V - Minicurso - Introdução ao android
2017 08-11 - Androidos V - Minicurso - Introdução ao android
 
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
Docker + Bancos de Dados: descomplicando a montagem de ambientes de Desenvolv...
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Conhecendo o Nodejs
Conhecendo o NodejsConhecendo o Nodejs
Conhecendo o Nodejs
 
Quasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenhoQuasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenho
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APP
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
Angular5, vue js ou react redux (Trilha de Javascript - TDC 2018 )
 
Preparar o ambiente para desenvolvimento angular
Preparar o ambiente para desenvolvimento angularPreparar o ambiente para desenvolvimento angular
Preparar o ambiente para desenvolvimento angular
 

Dernier

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 

Dernier (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstrap e Node.js

  • 1. Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstrap e Node.js Tags: Node.js, HTML5, Angular.js e Twitter Bootstrap
  • 3. Um pouco sobre mim  Daniel Souza Makiyama  E-mail: daniel.makiyama@gmail.com  Graduado em Ciência da Computação pela FEI;  Cursando Mestrado em Ciência da Computação pela UFABC;  Microsoft Certified Professional (Desenvolvimento Web em ASP.NET 4.5);  Sócio-Fundador da Donuts4u Desenvolvimento e Comunicação Via Web.
  • 4. Um pouco sobre você  Qual é o seu nome?  Qual sua experiência profissional?  Qual é a sua experiência com desenvolvimento web?  O que você espera aprender no curso de Aplicativos Web com HTML5, Angular.js, Twitter Bootstrap e Node.js?
  • 5. Plano de Curso  O futuro da Web  Interface de usuário também é coisa de programador  Sopa de Frameworks  Por onde Começar?  Instalando o Node.js  Instalando a IDE ATOM  Hello Node!  O prompt de comando  Instalando o Angular.Js  Hello Angular!  Instalando o Twitter Bootstrap  Testes com o Bootstrap  Instalando o GIT
  • 6. Plano de Curso  Aplicação PhoneCat (fonte: tutorial do site angularjs.org)  Template Estático  Templates Angular  Filtrando Repetidores  Vinculação dupla de dados  XHRs e Injeção de Dependências  Links de Template e Imagens  Rotas e Visões Múltiplas  Mais templates  Filtros  Tratador de Eventos  REST e Serviços Customizados  Animações  Participação em Pesquisa: Base de Conhecimento de Frameworks Web  Pesquisa Qualitativa: Impressões e Feedback
  • 7. Motivação / Oportunidade  Javascript é a linguagem com maior demanda atual no mercado;  Bolsas de iniciação científica:  Arquiteturas e Frameworks Web  Pesquisa sobre arquiteturas e frameworks da internet e suas aplicações; fonte: linguagem vs salário / demanda (http://tinyurl.com/ppbu65x acessado em 05/01/2014) (pesquisa realizada de Janeiro à Junho de 2014 nos Estados Unidos, Grã-Bretanha e Austrália
  • 8. Qual é o futuro da web? fonte: Application Foundations for The Open Web Platform (http://tinyurl.com/nnxbt4x acessado em 05/01/2014)  Experiência única em qualquer contexto;  Integração total entre dispositivos;  Modularização e reuso de interfaces;  Mídias e comunicação em tempo real;  Maior usabilidade e acessibilidade;  Novos serviços de api aberta;  Segurança e privacidade;
  • 9. Interface de Usuário também é coisa de Programador Estrutura Organização Testes Modularização com o aumento da complexidade, como gerenciar a qualidade? AutomaçãoCodificação
  • 10. Sopa de Frameworks fonte: Javascript The Right Way (http://jstherightway.org/ acessado em 05/01/2015) ...e isso não representa nem a metade dos frameworks disponíveis!
  • 13. Instalando a IDE Atom https://atom.io/ Windows Installer para Windows 7 (o Atom não precisa de instalação)
  • 14. Hello Node!  Inicialmente crie em seudiretoriohellonode um arquivo entitulado hello.js;  Abra o Atom e arraste o arquivo hello.js vazio para o mesmo;  Implemente o seguinte código no arquivo e salve;
  • 15. O prompt de comando  Localize no menu iniciar o ‘node.js command prompt’, abra o programa;  Navegue até a pasta do arquivo hello.js e digite ‘node hello.js’ para iniciar o servidor web node.js;  Verifique a mensagem ‘Servidor executando em http://127.0.0.1:8000/
  • 16. O prompt de comando  Abra o navegador de sua preferência e digite http://127.0.0.1:8000/ . Você verá a mensagem: Hello Node!  Voltem ao prompt de comando e digitem ctrl+c para parar o servidor;
  • 17. Instalando o Angular.js  Digite ‘npm install angular’ para instalar o angular.js na sua pasta (existem outras maneiras de instalar o angular);  O comando copia os arquivos da última versão do angular.js para o diretório node_modules/angular/ fonte: NPM (https://www.npmjs.com/package/angular acessado em 05/01/2015)
  • 18. Hello Angular!  Crie um arquivo com o nome index.html na pasta helloangular;  Abra o Atom e arraste o arquivo index.html recém criado para o mesmo;  Implemente o código ao lado no arquivo e salve; fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
  • 19. Hello Angular!  Abra o prompt de comando do node.js, navegue até a pasta helloangular e digite o comando ‘npm install http-server –g’ para instalar o servidor http-server globalmente;  Inicialize o servidor digitando http-server –a 0.0.0.0 –p 8000; fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
  • 20. Hello Angular!  Abra o navegador de sua preferência e digite http://localhost:8000/ . Você verá um campo de texto e uma mensagem ‘Hello’;  Digite qualquer texto na caixa de texto e automaticamente o texto é exibido no <h2> (no exemplo ao lado digitamos ‘Angular!!!!’);  Volte ao prompt de comando e digite ctrl+c para parar o servidor; fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015)
  • 21. Instalando o Twitter Bootstrap  Vamos utilizar o Yeoman para instalar o bootstrap(existem outras maneiras de instalar o bootstrap). Digite ‘npm install -g yo’ para instalar o bootstrap globalmente;  Digite ‘yo webapp’ para criar uma nova aplicação web;  Mantenha a opção padrão ‘Bootstrap’ e pressione a tecla <espaço>. O gerador Yeoman criará diversos arquivos básicos para uma aplicação web (demora um pouquinho); fonte: webapp (https://github.com/yeoman/generator-webapp acessado em 05/01/2015)
  • 22. Instalando o Twitter Bootstrap  Vamos verificar a estrutura criada pelo gerador, começando pela raiz;  Package.json => pacotes npm  devDependencies => referências;  engines => versão do node.js e/ou npm;  Gruntfile.js => executador de tarefas  serve => inicializa servidor, injeta dependências (bower), auto-prefixos de css, auto-refresh; fonte: gruntjs (http://gruntjs.com/ acessado em 05/01/2015) ...
  • 23. Instalando o Twitter Bootstrap  Bower.json => dependências de front-end;  .yo-rc.json => configurações Yeoman;  .jshintrc => configurações jshintrc;  .gitignore => pastas/extensões a serem ignorado(a)s no commit;  .gitattributes => atributos dos arquivos a serem comitados, por caminho;  .editorconfig => configurações para IDEs;  .bowerrc => configurações do bower; fonte: bower (http://bower.io/ acessado em 05/01/2015)
  • 24. Instalando o Twitter Bootstrap  testspec => pasta de testes;  test.js => implementação de testes;  Implemente o código ao lado no arquivo e salve;  Acesse o prompt de comando e execute o comando ‘grunt test’ para rodar o teste implementado; fonte: mocha (http://mochajs.org/ acessado em 05/01/2015)
  • 25. Instalando o Twitter Bootstrap  app => pasta da aplicação;  index.html => página inicial da aplicação;  Acesse o prompt de comando e execute o comando ‘grunt serve’ para inicializar o servidor. Automaticamente a página inicial da aplicação é apresentada no navegador; fonte: gruntjs (http://gruntjs.com/ acessado em 05/01/2015)
  • 26. Testes com o Bootstrap fonte: http-server (https://www.npmjs.com/package/http-server acessado em 05/01/2015) >>  pratique: crie uma table com class table e table-striped e veja o resultado.  foi possível verificar o livereload?
  • 27. Instalando o GIT fonte: git (http://git-scm.com/ acessado em 05/01/2015) http://git-scm.com/download/ Windows Installer
  • 28. Recapitulando Aula anterior. Objetivo: existem inúmeras possíveis configurações de projetos web Framework de padrões para desenvolvimento mobile-first Executador de Tarefas, automatiza atividades manuais envolvendo diversos pacotes Framework para criação e execução de testes Javascript Ferramenta geradora de código (facilita a construção de código) Aula de hoje: Projeto Phonecat: Estrutura básica recomendada pelo site do AngularJS.org Gestores de pacotes
  • 29. O que é o Angular.js? O HTML é mestre em lidar com conteúdo estático, mas ainda falha no dinamismo. AngularJS permite extender o vocabulário do HTML para sua aplicação. O ambiente resultante é expressivo, fácil de usar e rápido de desenvolver. fonte: git (http://todomvc.com/examples/angularjs/#/ acessado em 05/01/2015)
  • 30. Ajustes Possíveis Problemas de Permissão e tamanho do caminho dos pacotes npm Apagar sua pasta, criar novamente ex: c:dsm e criar a pasta c:npm Abrir o notepad como administrador; Acessar o arquivo npmrc em : C:program filesnodejsnode_modulesnpm e colocar: prefix=c:npm e salvar; Navegar até o diretório do seu projeto cd dsm, baixar o projeto do GIT git clone --depth=14 https://github.com/angular/angular-phonecat.git; Abrir o console na pasta do projeto (angular-phonecat) e rodar git config --global url.”https://”.insteadOf git:// ;
  • 31. Aplicação PhoneCat  Abra o prompt de comando e clone o repositório do tutorial ‘git clone -- depth=14 https://github.com/angular/angular- phonecat.git’  Navegue no prompt até a pasta angular-phonecat recém criada e execute ‘npm install’ para instalar todas as ferramentas especificadas no arquivo package.json; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 32. Aplicação PhoneCat  Digite o comando ‘npm start’ para iniciar o servidor na porta 8000 (como definido no arquivo packages.json;  O servidor apresenta como diretório raiz a pasta phonecatangular-phonecat. Clique na pasta ‘app’ para acessar a aplicação;  Navegue um pouco na aplicação. É um catálogo de smartphones; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 33. Aplicação PhoneCat  Reinicie o Atom e arraste o arquivo package.json do dir. angular-phonecat para ele. O projeto angular-phonecat será aberto no Atom;  Abra um novo console, acesse a pasta da aplicação e digite ‘npm test’ para rodar os testes. Os testes unitários executados estão presentes no diretório angular- phonecattestunit;  gere um erro no teste it(‘should fetch phone detail’... e verifique se o console de teste é atualizado; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 34. Aplicação PhoneCat  Pare o processo automático de testes com ctrl+c e ‘S’. Execute o comando ‘git checkout –f step-0’ para voltar o projeto ao step-0 do tutorial;  Como o servidor ainda está rodando em outro console acesse localhost:8000/, clique no diretório app. Na página dê ctrl+F5 para eliminar cache. Aparecerá página com ‘Nothing here yet’;  No Atom abra o arquivo app/index.html e verifique as funções do angular na página;  multiplicar 3 inputs HTML. O que ocorre antes do preenchimento, e depois? fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 35. Angular Aplicação PhoneCat  O ng-app ativa o injetor do angular, responsável pela injeção de dependências. O injetor também cria o escopo raiz, contexto para o modelo da aplicação;  Angular compila o modelo de objetos do documento html (DOM) e processa as expressões;  Ao receber ações do usuário, Angular verifica modificações no modelo, caso existam, Angular executa novamente os vínculos afetados; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) ng-app escopo raiz template html expressões (vínculos) Ação usuário (mouse, teclado) visão modelo modifica
  • 36. Aplicação PhoneCat – template estático  Execute o comando ‘git checkout –f step-1’ para ir ao step-1 do tutorial;  Localize e abra o arquivo appindex.html e verifique o conteúdo estático incluído;  transforme o conteúdo dos itens nas tags <details> e <summary> do HTML5. Informe a class ‘nav nav-pills’ na <ul>. Finalize apresentando o total de telefones usando a tag <div> com class ‘alert alert- info’; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 37. Aplicação PhoneCat – templates angular  Execute o comando ‘git checkout –f step-2’ para ir ao step-2 do tutorial. Acesse o arquivo app/index.html;  ng-app define o módulo phonecatApp que possui o controller PhoneListCtrl;  ng-controller permite anexar o controller PhoneListCtrl à tag <body>. O modelo é definido no controller;  ng-repeat permite o loop dos itens do modelo de acordo com o template especificado dentro da <li> com os vínculos {{phone.name}} e {{phone.snippet}}; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 38. Aplicação PhoneCat – templates angular  Acesse o arquivo app/js/controllers.js;  angular.module define o módulo phonecatApp, sem dependências ‘[]’ e atribui à variável phonecatApp;  phonecatApp define o controller ‘PhoneListCtrl’;  PhoneListCtrl anexa os dados dos smartphones ao escopo ($scope), atribuindo os mesmos à variável ‘phones’;  Este escopo está definido a todos os vínculos localizados dentro da tag de <body>, onde a diretiva ng- controller=“PhoneListCtrl” é definida;  Graças ao escopo, a visão e o modelo estão sempre sincronizados: http://plnkr.co/edit/zZfUQN?p=preview; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 39. Aplicação PhoneCat – templates angular  Acesse o arquivo test/unit/controllersSpec.js;  testes unitários do controller ‘PhoneListCtrl’;  beforeEach => inicializa módulo ‘phonecatApp’ antes da execução dos testes;  it => define cada teste;  inject => injeta o serviço controller no teste, que permite obter o controller pelo nome;  O escopo é mock (simula o comportamento do objeto real neste contexto);  A verificação é feita através da função expect do framework jasmine; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 40. Aplicação PhoneCat – templates angular  Abra o console na pasta do projeto e execute ‘npm test’. O único teste será executado com sucesso;  Crie uma nova variável no arquivo de app/js/controller.js chamada ‘itemName’ com nome ‘Lista de Telefones’;  Na página app/index.html crie uma <h2> que apresente a mensagem ‘Olá Lista de Telefones’ com a variável ‘itemName’;  Crie um novo teste para verificar se a variável ‘itemName’ está preenchida corretamente no controller: expect(scope.itemName).toBe(‘Lista de Telefones’);  Crie uma tabela conforme a imagem ao lado e corrija o código para apresentar os números multiplicados por 2, por linha; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 41. Aplicação PhoneCat – filtrando repetidores  Execute o comando ‘git checkout –f step-3’ para ir ao step-3 do tutorial. Acesse o arquivo app/index.html;  Verifique na index.html que foi incluído um input com nome query e a sentença ‘| filter:query’ no repetidor;  Vinculação: no carregamento da página a variável query do input é ligada ao modelo, ou seja, ao escopo do controller ‘PhoneListCtrl’;  Devido à sintaxe ‘filter:query’ no repetidor, qualquer alteração na variável ‘query’ faz com que o repetidor atualize o DOM para refletir as mudanças;  crie uma variável chamada query no controller PhoneListCtrl e preencha com o valor ‘Nex’; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) Index.html Escopo do PhoneListCtrl query phones
  • 42. Aplicação PhoneCat – filtrando repetidores  A função ’filter’ utiliza a variável ‘query’ para criar um novo array com itens que contém este conteúdo. O filtro verifica o conteúdo em todas as propriedades de cada item do array;  busque pela palavra ‘next’ e ‘motorola’ comprove que a busca varre não só a variável ‘name’, mas também a propriedade ‘snippet’;  A função ‘filter’ possui diversas opções:  troque a variável query por um objeto com {name: query}. Coloque uma negação em query (‘!’) e veja o resultado;  substitua a variável query pela função filterName, implemente a função no controller e teste. A função deve filtrar pela propriedade snippet; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) a função é executada n vezes, para cada item do array, em cada execução, o item do array é passado como primeiro parâmetro (item) dica... dica...
  • 43. Aplicação PhoneCat – filtrando repetidores  Acesse o arquivo em teste2escenarios.js . Neste arquivo está a implementação de um teste de integração que verifica a funcionalidade de filtro;  Para executá-lo, abra o prompt de comando, navegue até a pasta do projeto e digite o comando: ‘npm run protractor’. O navegador é aberto automaticamente e é possível visualizar o teste sendo executado; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 44. Aplicação PhoneCat – filtrando repetidores  Coloque a variável {{query}} no <title> antes de ‘Google Phone Gallery’;  Crie um teste integrado conforme a imagem ao lado; Veja que o valor não aparece pois a tag <title> não está na região definida pelo escopo do controller ‘PhoneListCtrl’ (<body>);  Mova o ng-controller=‘PhoneListCtrl’ para a tag <html> e verifique novamente a página;  Para evitar mostrar {{query}} poucos milisegundos após o carregamento da página, utilize ng-bind-template;  Com o protector o modelo do Angular e o DOM da aplicação fica acessível através da propriedade ‘element’. Crie um <h3> na app/index.html e inclua a variável {{query}} nele. Crie um teste integrado para verificar se o valor da query está presente no <h3>; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) dica...
  • 45. Aplicação PhoneCat – vinculação dupla de dados  Execute o comando ‘git checkout –f step-4’ para ir ao step-4 do tutorial. Acesse o arquivo app/index.html;  Neste step foi incluído um combobox com propriedade ‘orderProp’;  No filtro foi incluído ‘orderBy:orderProp’ ao filtro. Este encadeamento permitirá que, além de filtrar, o resultado do filtro também seja ordenado;  No controller, a propriedade ‘age’ também foi adicionada ao array de telefones;  O valor padrão do campo de ordenação é ‘age’; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 46. Aplicação PhoneCat – vinculação dupla de dados  Foi incluído teste unitário para a nova variável. Verifique o status da sua console de testes unitários (npm test);  Foi incluído teste de integração que verifica a ordenação. Lembrando que no momento ainda não estamos utilizando dados remotos, portanto não é possível preencher o array de telefones com dados de teste para implementar o teste integrado. Rode os testes (npm run protractor);  Reverta a ordenação adicionando um ‘-’ antes dos valores do combobox. Porque apareceu uma opção vazia no combobox? fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 47. objeto Aplicação PhoneCat – xhr e injeção de dependências  Execute o comando ‘git checkout –f step-5’ para ir ao step-5 do tutorial. Acesse o arquivo app/phones/phones.json. Este arquivo possui uma lista de telefones no formato JSON;  Abra o arquivo app/js/controllers.js. $http é um serviço do Angular que permite realizar requisições HTTP. Serviços são injetados no controllers;  Uma requisição ‘get’ retorna um objeto ‘promise’ (compromisso) com um método ‘success’, desta forma é possível tratar a resposta assíncrona;  Não é necessário fazer parse do json;  Serviços do Angular possuem prefixo ‘$’. Por questões de minificação, o nome dos serviços é apresentado no formato string; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) injetor serviços $http $scope ... fábricas instâncias
  • 48. Aplicação PhoneCat – xhr e injeção de dependências  Acesse o arquivo test/unit/controllersSpec.js. O método ‘inject’ é utilizado para injetar instâncias dos serviços $rootScope, $controller e $httpBackend na função beforeEach do Jasmine (isolamento);  Neste método o escopo é inicializado e o httpBackend é ‘mockado’, ou seja, é definido o retorno esperado para a url acessada no controller;  Adicione uma tag <pre>{{phones | filter:query | orderBy:orderProp | json}}</pre> para visualizar os telefones em formato JSON;  No callback do carregamento dos telefones, limite o número de telefones a um único item (use o método splice). Arrume o teste unitário; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 49. Aplicação PhoneCat – Links de Template e Imagens  Execute o comando ‘git checkout –f step-6’ para ir ao step-6 do tutorial. Acesse o arquivo app/index.html e verifique os links da lista de telefones ‘#/phones/{{phone.id}}’;  Porque no caso da tag img utilizamos ng-src ao invés de colocar as 2 chaves ‘{{}}’?  Abra o arquivo test/e2e/scenarios.js e verifique o novo teste criado. Execute o teste ‘npm run protractor’;  Substitua o ‘ng-src’ por um ‘src’ comum. Verifique as requisições na ferramenta de desenvolvedor do Chrome; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 50. Aplicação PhoneCat – Rotas e Visões Múltiplas  Execute o comando ‘git checkout –f step-7’ para ir ao step-7 do tutorial. Acesse o arquivo bower.json e verifique que foi incluído a dependência “angular-route”. Rode ‘npm install’;  Inclua um link ‘<a href="#/phones">voltar</a>’ na página app/partials/phone-detail.html. Navegue na aplicação e verifique que o link no navegador muda, mas a página não dá refresh;  Na função de config são definidos os ‘provedores’ de cada serviço, onde é possível controlar a criação e comportamento em tempo de execução do serviço;  Abra o arquivo app/js/app.js. Veja que o módulo ngRoute e o módulo phonecatControllers são definidos como dependências do módulo da aplicação; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) objeto injetor serviços $route ... instâncias $routeProvider atalhos: factory, value providers O script precisa ser incluído no template layout <=
  • 51. $route service Aplicação PhoneCat – Rotas e Visões Múltiplas  Abra o app/index.html. Com o serviço de rotas, a URL e o ng-view ficam vinculados.  Voltando ao arquivo app/js/app.js, verifique que caso o link seja ‘/phones’, o ng-view renderiza ‘partials/phone-list.html’, caso o link seja ‘phones/:phoneId’, o ng-view renderiza ‘partials/phone-detail.html’;  O provedor de rotas é injetado no método de configuração e as rotas são definidas no método ‘when’ do provider;  Note a rota ‘/phones/:phoneId’, informações precedidas por ‘:’ são extraídas da URL e agregadas ao parâmetro $routeParams disponível no controller; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) Index.html ngView $routeProvider Index.html
  • 52. Aplicação PhoneCat – Rotas e Visões Múltiplas  Abra o arquivo app/js/controllers.js. Note que foi criado um módulo chamado ‘phonecatControllers’ para armazenar os dois controllers;  No controller ‘PhoneDetailCtrl’ é injetado o objeto ‘$routeParams’ que possui a propriedade ‘phoneId’ obtida via rota => querystring;  Acesse o arquivo de testes de integração. Entenda e execute os testes (npm run protractor). Em ‘should display placeholder...’, troque ‘by.binding’ por ‘by.model’, porque não funciona?  Inclua ‘{{orderProp}}’ em app/index.html; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 53. Aplicação PhoneCat – Mais templates  Execute o comando ‘git checkout –f step-8’ para ir ao step-8 do tutorial. Na pasta app/phones/ é possível verificar além do arquivo phones.json outros arquivos, um para cada modelo de telefone com detalhes em formato json;  Abra o arquivo ‘app/js/controllers.js’ e no controller ‘PhoneDetailCtrl’ verifique a requisição aos arquivos com detalhes dos telefones;  Abra o arquivo ‘app/partials/phone-detail.html’. Veja que não é mais necessário especificar o ng- controller. O mesmo é vinculado ao template através da rota;  Abra o arquivo ‘test/unit/controllersSpec.js’ e verifique novos testes para a visão de detalhes; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 54. Aplicação PhoneCat – Mais templates  Abra o arquivo ‘test/unit/controllersSpec.js’ e verifique novos testes para a visão de detalhes. Retire a linha que atribui valor para ‘phoneId’ e execute o teste;  Abra o arquivo ‘test/e2e/scenarios.js’ e verifique o teste ‘should display nexus-s page’;  Escreva um teste integrado que verifique que são apresentadas 4 thumbnails na página de detalhes do ‘Nexus S’; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 55. Aplicação PhoneCat – Filtros Customizados  Execute o comando ‘git checkout –f step-9’ para ir ao step-9 do tutorial.  Abra o arquivo ‘app/js/filters.js’, verifique o filtro ‘checkmark’ que a partir de uma variável booleana apresenta o caracter ✓ para verdadeiro ou ✘para falso. Este arquivo deve ser incluído na index.html para que funcione;  Abra o arquivo ‘app/partials/phone-detail.html’ e veja o filtro customizado aplicado à 2 variáveis;  Abra o arquivo ‘test/unit/filtersSpec.js’ e verifique as injeções de dependência. No caso de filtros, o sufixo ‘Filter’ deve ser adicionado ao nome do filtro quando injetado;  No arquivo ‘app/partials/phone-detail.html’, experimente filtros como: uppercase, limitTo( você pode encadear filtros); fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 56. Aplicação PhoneCat – Filtros Customizados  Execute o comando ‘git checkout –f step-10’ para ir ao step-10 do tutorial.  Abra o arquivo ‘app/js/controllers.js’. A função tratadora de eventos ‘setImage’ altera o valor da propriedade ‘mainImageUrl’;  Abra o arquivo ‘app/partials/phone-detail.html’ e verifique o atributo ‘ng-click’ que utiliza a função ‘setImage’ para tratar o evento de clique nas imagens;  Abra o arquivo ‘test/e2e/scenarios.js’ e verifique dois novos métodos que verificam este mecanismo recém implementado;  Abra o arquivo ‘test/unit/controllersSpec.js’ e veja a nova função ‘xyzPhoneData’. Retire o item ‘images’ e veja o teste falhar. Porque? Teste o funcionamento do ‘ng-mouseover’; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 57. Aplicação PhoneCat – Rest  Execute o comando ‘git checkout –f step-11’ para ir ao step-11 do tutorial. Abra o arquivo bower.json e veja a nova referência ‘ngResource’(implementação RESTful);  Abra o arquivo ‘app/js/services.js’ onde foi implementado o serviço de acesso a dados dos telefones;  Abra o arquivo ‘app/js/app.js’ e visualize a nova dependência: ‘phonecatServices’;  Abra o arquivo ‘app/js/controllers.js’ e verifique os controllers ainda mais simplificados e sem dependência do serviço $http;  Verifique as alterações nos testes unitários (referências, código e funções usadas), ex: toEqualData; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) O script precisa ser incluído no template layout <=
  • 58. Aplicação PhoneCat – Aplicando Animações  Execute o comando ‘git checkout –f step-12’ para ir ao step-12 do tutorial, Abra o arquivo bower.json: jquery e ng-animate serão utilizados; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) O script precisa ser incluído no template layout <= Muitas animações podem ser feitas em CSS3, mas coisas mais complexas precisam de Javascript. Para entender animações em Angular é necessário primeiro entender ‘transitions’ em HTML5: http://www.w3schools.com/css/tryit.asp?filename=trycss3_transition1 Transições também funcionam quando novas classes são incluídas via javascript: http://jsfiddle.net/makiyamad/c7zsvyuo/6/ Transições funcionam toda vez que a(s) propriedade(s) monitorada(s) é(são) alterada(s), não necessariamente porque uma classe foi alterada no elemento em questão: http://jsfiddle.net/makiyamad/4s3posav/1/
  • 59. Aplicação PhoneCat – Aplicando Animações  Veja o passo a passo de uma animação de ‘hide’ : https://docs.angularjs.org/guide/animations . Veja o css utilizado: fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 60. Aplicação PhoneCat – Aplicando Animações  Abra o arquivo ‘app/partials/phone-list.html’, veja a classe ‘phone-listing’ que foi adicionada ao <li>;  Abra o arquivo ‘app/css/animations.css’. No caso de animações no ng-repeat:  ng-enter aplicado quando um novo item é adicionado à lista e renderizado na página;  ng-move aplicado quando o item é movido na lista;  ng-leave aplicado quando o item é removido da lista; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) este css define que nos 3 tipos de transições deve ser executada uma animação ex: o estado ng-leave é o estado de animação iniciada e o ng-enter-active marca o estado final da animação;
  • 61. Aplicação PhoneCat – Aplicando Animações  Para simular o funcionamento inclua o serviço $interval no controller PhoneListCtrl, aumente o tempo da animação no css para 5 segundos e com a ferramenta do desenvolvedor abra o console e monitore.  Você verá algo semelhante à imagem abaixo, que comprova que a sequência ng-enter > ng-enter- active ou ng-leave > ng-leave-active é executada antes de mostrar ou remover um elemento de um repeater; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 62. Aplicação PhoneCat – Aplicando Animações  Também é possível realizar animações com keyframe CSS3;  A animação é definida através da cláusula ‘@keyframes’ e utilizada na classe através do atributo ‘animation’;  Para verificar esta animação clique em um telefone na página principal de telefones, você verá o efeito de fade-out e fade-in.  Na tela de detalhes de um telefone, clique na seta de voltar do próprio navegador. É impressionante verificar o fade-out e fade-in também é executado e não há refresh;  Inclua o link voltar no phone-details.html, veja a mesma animação ao clicar nele; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015)
  • 63. Aplicação PhoneCat – Aplicando Animações  Abra o arquivo ‘app/js/animations.js’, veja que foi criada uma animação para a classe ‘.phone’;  A animação animateup é disparada quando a classe active é adicionada nos elementos com classe phone;  A animação animatedown é disparada quando a classe active é removida dos elementos com classe phone; fonte: tutorial angularjs (https://docs.angularjs.org/tutorial acessado em 05/01/2015) - active active - -500 + 0 + 500 -500 + 0 + 500 active - -500 + 0 + 500 animateup animatedown
  • 64. Base de Conhecimento de Frameworks Web Engenharia de Software Arquitetura Web; Método : programação e técnicas de IHC;
  • 65. Base de Conhecimento de Frameworks Web Questão da Pesquisa Grande volume de frameworks web;  Curva de aprendizagem: vale a pena?  Como classificar os frameworks web e promover o conhecimento?  Como tornar o processo de seleção mais pragmático?
  • 66. Base de Conhecimento de Frameworks Web Objetivo Classificar frameworks web e criar uma base e conhecimento para a tomada de decisão;
  • 67. Base de Conhecimento de Frameworks Web Como participar? Motivação  Hands-On : IHC e Estudo de Diversos Frameworks Web;  Caso tenha interesse deixe seu e-mail comigo;