SlideShare uma empresa Scribd logo
ANGULARJS
por: Cristiano Pires Martins
fonte:
http://javascriptbrasil.com
http://tableless.com.br
http://www.w3schools.com
https://www.angularjs.org
http://www.devmedia.com.br
Introdução
➤ AngularJS é o mais novo lançamento do time de
desenvolvedores do Google. Diferentemente de outros
frameworks JavaScript, ele adota uma abordagem mais ligada
à sintaxe HTML, funcionando como uma espécie de extensão
da linguagem.
➤ AngularJS is a JavaScript framework. It is a library written in
JavaScript.
➤ AngularJS is distributed as a JavaScript file, and can be added
to a web page with a script tag:
➤ <script src="http://ajax.googleapis.com/ajax/libs/
angularjs/1.3.14/angular.min.js"></script>
Material
➤ Fonte:
➤ https://developers.google.com/speed/libraries/#angularjs
➤ AngularJS Home Page: https://angularjs.org/ (muito bom)
➤ AngularJS Guide: http://docs.angularjs.org/guide/overview
➤ Tutorial Oficial do AngularJS: http://docs.angularjs.org/tutorial
➤ Materiais:
➤ https://material.angularjs.org/latest/
➤ https://github.com/angular/material-start
➤ Exemplos práticos: http://javascriptbrasil.com/2013/10/23/aprenda-angularjs-com-estes-5-exemplos-praticos/
➤ Depuração no Chrome:
➤ https://github.com/angular/batarang
➤ Batarang - Extensão para Debug do Chrome:
➤ https://www.youtube.com/watch?v=q-7mhcHXSfM&feature=youtu.be
➤ Cursos:
➤ em vídeo: http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro
➤ http://www.devmedia.com.br/exemplo-basico-usando-angularjs-curso-completo-de-angularjs-aula-2/32149
➤ em vídeo: http://egghead.io/lessons
➤ em vídeo: https://dicasdolampada.wordpress.com/2013/10/15/videos_angularjs/
Pré-requisitos
➤ Conhecer:
➤ HTML
➤ CSS
➤ JavaScript
AngularJS Extends HTML
➤ AngularJS extends HTML with ng-directives.
➤ The ng-app directive defines an AngularJS application.
➤ The ng-model directive binds the value of HTML
controls (input, select, textarea) to application data.
➤ The ng-bind directive binds application data to the
HTML view.
http://www.w3schools.com/angular/angular_intro.asp
Exemplo 1
<!DOCTYPE html>
<html>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/
angular.min.js"></script>
<body>
<div ng-app="" ng-init="firstName='John'">
<p>The name is <span ng-bind="firstName"></span></p>
</div>
</body>
</html>
Exemplo 2
<!DOCTYPE html>
<html lang="en-US">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/
angular.min.js"></script>
<body>
<div ng-app="">
  <p>Name : <input type="text" ng-model="name"></p>
  <h1>Hello {{name}}</h1>
</div>
</body>
</html>
Examples explained
➤ AngularJS starts automatically when the web page has loaded.
➤ The ng-app directive tells AngularJS that the <div> element
is the "owner" of an AngularJS application.
➤ The ng-model directive binds the value of the input field to
the application variable name.
➤ The ng-bind directive binds the innerHTML of the <p>
element to the application variable name.
http://www.w3schools.com/angular/angular_intro.asp
AngularJS Directives
➤ As you have already seen, AngularJS directives are HTML
attributes with an ng prefix.
➤ The ng-init directive initialize AngularJS application variables.
http://www.w3schools.com/angular/angular_intro.asp
<div ng-app="" ng-init="firstName='John'">
<p>The name is <span ng-bind="firstName"></span></p>
</div>
AngularJS Expressions
➤ AngularJS expressions are written inside double braces: {{ expression }}.
➤ AngularJS will "output" data exactly where the expression is written:
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div ng-app="">
<p>My first expression: {{ 5 + 5 }}</p>
</div>
</body>
</html>
http://www.w3schools.com/angular/angular_intro.asp
História
➤ A versão 1.0 do AngularJS saiu em 2012.
➤ Miško Hevery, um funcionário da Google, começou a trabalhar
com AngularJS em 2009.
➤ A idea foi tão boa que hoje o projeto é oficialmente apoiado
pelo Google.
Estrutura Inicial
➤ Uma aplicação web básica informando uma nova propriedade
na tag do arquivo: ng-app.
<html ng-app>
<head>
<title>Lista de compras</title>
<script src="http://code.angularjs.org/1.0.1/angular-1.0.1.min.js"></script>
</head>
<body>
</body>
</html>
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
➤ O atributo ng-app na tag informa que o DOM, além
de HTML, é também um documento AngularJS.
Estrutura Inicial
➤ Essa propriedade pode ser utilizada em qualquer elemento do DOM — em alguns
casos, apenas uma parte do seu HTML será uma aplicação Angular.
<html ng-app>
<head>
<title>AngularJS - Tableless</title>
<script src="http://code.angularjs.org/1.0.1/angular-1.0.1.min.js"></script>
</head>
<body>
<input type="text" ng-model="nome">
<p>Olá, Tableless! Meu nome é: {{ nome }}</p>
</body>
</html>
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
O atributo ng-app na tag informa que o DOM, além de
HTML, é também um documento AngularJS.
O framework define o elemento com o atributo ng-app como a raiz da aplicação.
Explicação do Código
➤ Ao carregar o HTML no navegador e digitar qualquer coisa no
input, o parágrafo é atualizado automaticamente. Perceberam:
nada em JavaScript?
➤ A propriedade ng-model funciona como um canal entre a
view e o form. Ela pode ser utilizada em inputs do tipo texto,
selects, textareas, checkboxes e radio buttons.
➤ O model, seus dados e suas validações ficam automaticamente
disponíveis no escopo da nossa aplicação.
➤ A associação de dados é feita através do famoso “bigode-
bigode” ({{ }}), passando nomes presentes no escopo (o
model nome).
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Enfim, javascript!
➤ Chegou a hora de escrever o primeiro código JavaScript.
Criando um controller para aplicação que carrega uma lista
inicial de ítens. Os ítens são armazenados no escopo da
aplicação ($scope).
function ListaComprasController($scope) {
$scope.itens = [
{produto: 'Leite', quantidade: 2, comprado: false},
{produto: 'Cerveja', quantidade: 12, comprado: false}
];
}
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Exibindo os ítens
<div ng-controller="ListaComprasController">
<table>
<thead>
<tr>
<th>Produto</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in itens">
<td><strong>{{ item.produto }}</strong></td>
<td>{{ item.quantidade }}</td>
</tr>
</tbody>
</table>
</div>
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Adicionar um
novo bloco
HTML com a
tabela de
listagem dos
produtos:
Explicando
➤ Duas novidades foram apresentadas no HTML anterior:
➤ O atributo ng-controller informa o nome do controller
JavaScript responsável pelo bloco contido no elemento, no
caso o controller ListaComprasController definido
anteriormente.
➤ O atributo ng-repeat executa um loop na variável itens
declarada no escopo da aplicação, retornando cada item e
imprimindo o produto e a quantidade em uma linha da
tabela. O formato é: <retorno> in <coleção>.
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Adicionando Produtos
➤ Para não ficar apenas com 4 linhas de JavaScript, será adicionada
uma funcionalidade que inclui ítens em na lista de compras.
➤ O primeiro passo é criar um formulário que será responsável
pela ação:
<form class="form-inline" name="formItem">
<input type="text" ng-model="item.produto">
<input type="number" ng-model="item.quantidade">
<button ng-click="adicionaItem()">adicionar ítem</button>
</form>
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
O atributo ng-model está sendo utilizando novamente para definir um model para os
inputs. O controller passa a receber diretamente informações sobre esses campos.
ng-click
➤ A novidade dessa vez fica por conta do atributo ng-click, que
recebe uma função que precisa ser declarada no controller:
function ListaComprasController($scope) {
$scope.itens = [
{produto: 'Leite', quantidade: 2, comprado: false},
{produto: 'Cerveja', quantidade: 12, comprado: false}
];
$scope.adicionaItem = function () {
$scope.itens.push({produto: $scope.item.produto,
quantidade: $scope.item.quantidade,
comprado: false});
$scope.item.produto = $scope.item.quantidade = '';
};
}
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Explicando
➤ Ao clicar no botão, o produto é adicionado à tabela.
➤ Aqui o model poderia estar realizando diversas validações
disponíveis na API do framework entre outras coisas.
➤ Porém, no exemplo, apenas foi adicionado um novo item à
lista de produtos e em seguida os models foram limpos (os
campos do formulário).
Teste
➤ Por ser um framework que demanda um código JavaScript
mais estruturado, fica bem simples testar essa aplicação.
Utilizando Jasmine (http://tableless.com.br/testando-seu-
codigo-jquery-com-jasmine-parte-1/), por exemplo, poderia
facilmente testar o controller dessa forma:
describe('Lista Compras Unitário', function () {
describe('ListaComprasController', function () {
beforeEach(function () {
this.$scope = {};
this.controller = new ListaComprasController(this.$scope);
});
it('deve criar "itens" com 2 ítens', function () {
expect(this.$scope.itens.length).toBe(2);
});
describe('adicionaItem', function () {
it('deve adicionar um novo ítem à lista com dados do escopo', function () {
this.$scope.item = {};
this.$scope.item.produto = 'Carne';
this.$scope.item.quantidade = 5;
this.$scope.adicionaItem();
expect(this.$scope.itens.length).toBe(3);
expect(this.$scope.itens[2].produto).toBe('Carne');
expect(this.$scope.itens[2].quantidade).toBe(5);
expect(this.$scope.itens[2].comprado).toBeFalse;
});
});
});
});
http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
Código disponível…
➤ https://github.com/tableless/exemplos/tree/gh-pages/
angularjs/lista-compras/

Mais conteúdo relacionado

Mais procurados (20)

PDF
Java script aula 06 - dom
Cristiano Pires Martins
 
PDF
Introdução à MEAN Stack
Bruno Catão
 
PDF
Java script aula 07 - eventos
Cristiano Pires Martins
 
PDF
Introdução ao JQuery e AJAX
Sérgio Souza Costa
 
KEY
Python 06
Bruno Catão
 
PDF
jQuery na Prática!
José Alexandre Macedo
 
PPTX
Html dom, eventos, jquery
Ricardo Cavalcanti
 
PDF
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
PDF
Aplicações rápidas para a Web com Django
Freedom DayMS
 
PDF
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Rodrigo Bueno Santa Maria, BS, MBA
 
PPT
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
KEY
Python 08
Bruno Catão
 
KEY
Python 07
Bruno Catão
 
PDF
jQuery Simplificando o JavaScript
Everaldo Wanderlei Uavniczak
 
PDF
Ionic 2/3 + Firebase
Bruno Catão
 
PPTX
11 Java Script - Exemplos com eventos
Centro Paula Souza
 
PDF
Programação Web com jQuery
Victor Adriel Oliveira
 
PDF
Desenvolvimento de Módulos Divi Builder
Daniel Paz
 
KEY
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
 
PDF
ODIG - Javascript, DOM Elements e jQuery
Marketing Digital ODIG
 
Java script aula 06 - dom
Cristiano Pires Martins
 
Introdução à MEAN Stack
Bruno Catão
 
Java script aula 07 - eventos
Cristiano Pires Martins
 
Introdução ao JQuery e AJAX
Sérgio Souza Costa
 
Python 06
Bruno Catão
 
jQuery na Prática!
José Alexandre Macedo
 
Html dom, eventos, jquery
Ricardo Cavalcanti
 
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
Aplicações rápidas para a Web com Django
Freedom DayMS
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Rodrigo Bueno Santa Maria, BS, MBA
 
Minicurso de JavaScript (Portuguese)
Bruno Grange
 
Python 08
Bruno Catão
 
Python 07
Bruno Catão
 
jQuery Simplificando o JavaScript
Everaldo Wanderlei Uavniczak
 
Ionic 2/3 + Firebase
Bruno Catão
 
11 Java Script - Exemplos com eventos
Centro Paula Souza
 
Programação Web com jQuery
Victor Adriel Oliveira
 
Desenvolvimento de Módulos Divi Builder
Daniel Paz
 
JQuery Alagoinhas Dev Day - UNEB
Luciano Borges
 
ODIG - Javascript, DOM Elements e jQuery
Marketing Digital ODIG
 

Destaque (20)

PDF
Java script aula 03 - objetos
Cristiano Pires Martins
 
PDF
Java script aula 04 - objeto array
Cristiano Pires Martins
 
PDF
Aula 06 textos na web
Cristiano Pires Martins
 
PDF
Aula 05 layout e composição do site
Cristiano Pires Martins
 
PDF
Javascript aula 01 - visão geral
Cristiano Pires Martins
 
PDF
Aula 03-oac-componentes-de-um-sistema-de-computacao
Cristiano Pires Martins
 
PDF
Aula 07 - lista linear
Cristiano Pires Martins
 
PDF
Aula 08 - árvores
Cristiano Pires Martins
 
PDF
OAC Aula 09 - Entrada e Saída
Cristiano Pires Martins
 
PDF
Aula 02 semiótica e cores
Cristiano Pires Martins
 
PDF
Aula 04 layout e composição do site
Cristiano Pires Martins
 
PDF
WDI - aula 07 - css com html
Cristiano Pires Martins
 
PDF
Palestra "Inovações Tecnológicas"
Rodrigo Bueno Santa Maria, BS, MBA
 
PDF
Aula 08-oac-execucao-de-programas
Cristiano Pires Martins
 
PDF
Aula 05-entrada e-saida
Cristiano Pires Martins
 
PDF
Aula 01-introducao-ao-so
Cristiano Pires Martins
 
PDF
Aula 01-oac-introducao-a-oac
Cristiano Pires Martins
 
PDF
Aula 02-oac-historia-da-computacao-part2
Cristiano Pires Martins
 
PDF
Aula 03-deadlock
Cristiano Pires Martins
 
PDF
Aula 04-gerenciamento-basico-de-memoria
Cristiano Pires Martins
 
Java script aula 03 - objetos
Cristiano Pires Martins
 
Java script aula 04 - objeto array
Cristiano Pires Martins
 
Aula 06 textos na web
Cristiano Pires Martins
 
Aula 05 layout e composição do site
Cristiano Pires Martins
 
Javascript aula 01 - visão geral
Cristiano Pires Martins
 
Aula 03-oac-componentes-de-um-sistema-de-computacao
Cristiano Pires Martins
 
Aula 07 - lista linear
Cristiano Pires Martins
 
Aula 08 - árvores
Cristiano Pires Martins
 
OAC Aula 09 - Entrada e Saída
Cristiano Pires Martins
 
Aula 02 semiótica e cores
Cristiano Pires Martins
 
Aula 04 layout e composição do site
Cristiano Pires Martins
 
WDI - aula 07 - css com html
Cristiano Pires Martins
 
Palestra "Inovações Tecnológicas"
Rodrigo Bueno Santa Maria, BS, MBA
 
Aula 08-oac-execucao-de-programas
Cristiano Pires Martins
 
Aula 05-entrada e-saida
Cristiano Pires Martins
 
Aula 01-introducao-ao-so
Cristiano Pires Martins
 
Aula 01-oac-introducao-a-oac
Cristiano Pires Martins
 
Aula 02-oac-historia-da-computacao-part2
Cristiano Pires Martins
 
Aula 03-deadlock
Cristiano Pires Martins
 
Aula 04-gerenciamento-basico-de-memoria
Cristiano Pires Martins
 
Anúncio

Semelhante a Java script aula 10 - angularjs (20)

PDF
Angular js
Bruno Catão
 
PPT
Prototype Framework Javascript
Marcio Romu
 
PPT
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
PDF
Django Módulo Básico Parte II
antonio sérgio nogueira
 
PDF
Como Perder Peso (no browser)
Zeno Rocha
 
PDF
Spring MVC Framework
elliando dias
 
PDF
Mini curso introdutório ao Django
Vinicius Mendes
 
PDF
Desenvolvimento de aplicações para o Google App Engine
Campus Party Brasil
 
PDF
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Carlos Duarte do Nascimento
 
PPTX
Google Analytics Reporting API: Bebendo água direto da fonte
Johann Vivot
 
PDF
ASP.NET MVC
Alexandre Tarifa
 
PDF
ASP.NET MVC - Alexandre Tarifa
guestea329c
 
PDF
Aula 3_Camada de apresentação livro muito bom
Eltonlanga3
 
PDF
AngularJS com NODE.JS e Socket.IO
Douglas Lira
 
PDF
ApresentaçãO Mvc
Campus Party Brasil
 
PDF
Apresentação M V C
Campus Party Brasil
 
PDF
Hello vue
Gabriel Colombo
 
PPTX
Desenvolvendo aplicativos web com o google app engine
pugpe
 
PDF
Google apps script - Parte - 1
Sérgio Souza Costa
 
PDF
Javascript truquesmagicos
ponto hacker
 
Angular js
Bruno Catão
 
Prototype Framework Javascript
Marcio Romu
 
Desenvolvendo aplicações web com o framework cakephp
Rodrigo Aramburu
 
Django Módulo Básico Parte II
antonio sérgio nogueira
 
Como Perder Peso (no browser)
Zeno Rocha
 
Spring MVC Framework
elliando dias
 
Mini curso introdutório ao Django
Vinicius Mendes
 
Desenvolvimento de aplicações para o Google App Engine
Campus Party Brasil
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Carlos Duarte do Nascimento
 
Google Analytics Reporting API: Bebendo água direto da fonte
Johann Vivot
 
ASP.NET MVC
Alexandre Tarifa
 
ASP.NET MVC - Alexandre Tarifa
guestea329c
 
Aula 3_Camada de apresentação livro muito bom
Eltonlanga3
 
AngularJS com NODE.JS e Socket.IO
Douglas Lira
 
ApresentaçãO Mvc
Campus Party Brasil
 
Apresentação M V C
Campus Party Brasil
 
Hello vue
Gabriel Colombo
 
Desenvolvendo aplicativos web com o google app engine
pugpe
 
Google apps script - Parte - 1
Sérgio Souza Costa
 
Javascript truquesmagicos
ponto hacker
 
Anúncio

Mais de Cristiano Pires Martins (9)

PDF
Aula 08 - árvores
Cristiano Pires Martins
 
PDF
Aula 01 introdução
Cristiano Pires Martins
 
PDF
Aula 03 esquema de cores
Cristiano Pires Martins
 
PDF
Aula 07-oac-processadores
Cristiano Pires Martins
 
PDF
Aula 06-oac-memoria-principal
Cristiano Pires Martins
 
PDF
Aula 05-oac-conceitos-de-logica-digital
Cristiano Pires Martins
 
PDF
Aula 02-oac-historia-da-computacao-part1
Cristiano Pires Martins
 
PDF
Aula 10-oac-arquitetura-risc
Cristiano Pires Martins
 
PDF
Aula 06-sistemas de-arquivo
Cristiano Pires Martins
 
Aula 08 - árvores
Cristiano Pires Martins
 
Aula 01 introdução
Cristiano Pires Martins
 
Aula 03 esquema de cores
Cristiano Pires Martins
 
Aula 07-oac-processadores
Cristiano Pires Martins
 
Aula 06-oac-memoria-principal
Cristiano Pires Martins
 
Aula 05-oac-conceitos-de-logica-digital
Cristiano Pires Martins
 
Aula 02-oac-historia-da-computacao-part1
Cristiano Pires Martins
 
Aula 10-oac-arquitetura-risc
Cristiano Pires Martins
 
Aula 06-sistemas de-arquivo
Cristiano Pires Martins
 

Java script aula 10 - angularjs

  • 1. ANGULARJS por: Cristiano Pires Martins fonte: http://javascriptbrasil.com http://tableless.com.br http://www.w3schools.com https://www.angularjs.org http://www.devmedia.com.br
  • 2. Introdução ➤ AngularJS é o mais novo lançamento do time de desenvolvedores do Google. Diferentemente de outros frameworks JavaScript, ele adota uma abordagem mais ligada à sintaxe HTML, funcionando como uma espécie de extensão da linguagem. ➤ AngularJS is a JavaScript framework. It is a library written in JavaScript. ➤ AngularJS is distributed as a JavaScript file, and can be added to a web page with a script tag: ➤ <script src="http://ajax.googleapis.com/ajax/libs/ angularjs/1.3.14/angular.min.js"></script>
  • 3. Material ➤ Fonte: ➤ https://developers.google.com/speed/libraries/#angularjs ➤ AngularJS Home Page: https://angularjs.org/ (muito bom) ➤ AngularJS Guide: http://docs.angularjs.org/guide/overview ➤ Tutorial Oficial do AngularJS: http://docs.angularjs.org/tutorial ➤ Materiais: ➤ https://material.angularjs.org/latest/ ➤ https://github.com/angular/material-start ➤ Exemplos práticos: http://javascriptbrasil.com/2013/10/23/aprenda-angularjs-com-estes-5-exemplos-praticos/ ➤ Depuração no Chrome: ➤ https://github.com/angular/batarang ➤ Batarang - Extensão para Debug do Chrome: ➤ https://www.youtube.com/watch?v=q-7mhcHXSfM&feature=youtu.be ➤ Cursos: ➤ em vídeo: http://campus.codeschool.com/courses/shaping-up-with-angular-js/intro ➤ http://www.devmedia.com.br/exemplo-basico-usando-angularjs-curso-completo-de-angularjs-aula-2/32149 ➤ em vídeo: http://egghead.io/lessons ➤ em vídeo: https://dicasdolampada.wordpress.com/2013/10/15/videos_angularjs/
  • 5. AngularJS Extends HTML ➤ AngularJS extends HTML with ng-directives. ➤ The ng-app directive defines an AngularJS application. ➤ The ng-model directive binds the value of HTML controls (input, select, textarea) to application data. ➤ The ng-bind directive binds application data to the HTML view. http://www.w3schools.com/angular/angular_intro.asp
  • 6. Exemplo 1 <!DOCTYPE html> <html> <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/ angular.min.js"></script> <body> <div ng-app="" ng-init="firstName='John'"> <p>The name is <span ng-bind="firstName"></span></p> </div> </body> </html>
  • 7. Exemplo 2 <!DOCTYPE html> <html lang="en-US"> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/ angular.min.js"></script> <body> <div ng-app="">   <p>Name : <input type="text" ng-model="name"></p>   <h1>Hello {{name}}</h1> </div> </body> </html>
  • 8. Examples explained ➤ AngularJS starts automatically when the web page has loaded. ➤ The ng-app directive tells AngularJS that the <div> element is the "owner" of an AngularJS application. ➤ The ng-model directive binds the value of the input field to the application variable name. ➤ The ng-bind directive binds the innerHTML of the <p> element to the application variable name. http://www.w3schools.com/angular/angular_intro.asp
  • 9. AngularJS Directives ➤ As you have already seen, AngularJS directives are HTML attributes with an ng prefix. ➤ The ng-init directive initialize AngularJS application variables. http://www.w3schools.com/angular/angular_intro.asp <div ng-app="" ng-init="firstName='John'"> <p>The name is <span ng-bind="firstName"></span></p> </div>
  • 10. AngularJS Expressions ➤ AngularJS expressions are written inside double braces: {{ expression }}. ➤ AngularJS will "output" data exactly where the expression is written: <!DOCTYPE html> <html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app=""> <p>My first expression: {{ 5 + 5 }}</p> </div> </body> </html> http://www.w3schools.com/angular/angular_intro.asp
  • 11. História ➤ A versão 1.0 do AngularJS saiu em 2012. ➤ Miško Hevery, um funcionário da Google, começou a trabalhar com AngularJS em 2009. ➤ A idea foi tão boa que hoje o projeto é oficialmente apoiado pelo Google.
  • 12. Estrutura Inicial ➤ Uma aplicação web básica informando uma nova propriedade na tag do arquivo: ng-app. <html ng-app> <head> <title>Lista de compras</title> <script src="http://code.angularjs.org/1.0.1/angular-1.0.1.min.js"></script> </head> <body> </body> </html> http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/ ➤ O atributo ng-app na tag informa que o DOM, além de HTML, é também um documento AngularJS.
  • 13. Estrutura Inicial ➤ Essa propriedade pode ser utilizada em qualquer elemento do DOM — em alguns casos, apenas uma parte do seu HTML será uma aplicação Angular. <html ng-app> <head> <title>AngularJS - Tableless</title> <script src="http://code.angularjs.org/1.0.1/angular-1.0.1.min.js"></script> </head> <body> <input type="text" ng-model="nome"> <p>Olá, Tableless! Meu nome é: {{ nome }}</p> </body> </html> http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/ O atributo ng-app na tag informa que o DOM, além de HTML, é também um documento AngularJS. O framework define o elemento com o atributo ng-app como a raiz da aplicação.
  • 14. Explicação do Código ➤ Ao carregar o HTML no navegador e digitar qualquer coisa no input, o parágrafo é atualizado automaticamente. Perceberam: nada em JavaScript? ➤ A propriedade ng-model funciona como um canal entre a view e o form. Ela pode ser utilizada em inputs do tipo texto, selects, textareas, checkboxes e radio buttons. ➤ O model, seus dados e suas validações ficam automaticamente disponíveis no escopo da nossa aplicação. ➤ A associação de dados é feita através do famoso “bigode- bigode” ({{ }}), passando nomes presentes no escopo (o model nome). http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
  • 15. Enfim, javascript! ➤ Chegou a hora de escrever o primeiro código JavaScript. Criando um controller para aplicação que carrega uma lista inicial de ítens. Os ítens são armazenados no escopo da aplicação ($scope). function ListaComprasController($scope) { $scope.itens = [ {produto: 'Leite', quantidade: 2, comprado: false}, {produto: 'Cerveja', quantidade: 12, comprado: false} ]; } http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
  • 16. Exibindo os ítens <div ng-controller="ListaComprasController"> <table> <thead> <tr> <th>Produto</th> <th>Quantidade</th> </tr> </thead> <tbody> <tr ng-repeat="item in itens"> <td><strong>{{ item.produto }}</strong></td> <td>{{ item.quantidade }}</td> </tr> </tbody> </table> </div> http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/ Adicionar um novo bloco HTML com a tabela de listagem dos produtos:
  • 17. Explicando ➤ Duas novidades foram apresentadas no HTML anterior: ➤ O atributo ng-controller informa o nome do controller JavaScript responsável pelo bloco contido no elemento, no caso o controller ListaComprasController definido anteriormente. ➤ O atributo ng-repeat executa um loop na variável itens declarada no escopo da aplicação, retornando cada item e imprimindo o produto e a quantidade em uma linha da tabela. O formato é: <retorno> in <coleção>. http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
  • 18. Adicionando Produtos ➤ Para não ficar apenas com 4 linhas de JavaScript, será adicionada uma funcionalidade que inclui ítens em na lista de compras. ➤ O primeiro passo é criar um formulário que será responsável pela ação: <form class="form-inline" name="formItem"> <input type="text" ng-model="item.produto"> <input type="number" ng-model="item.quantidade"> <button ng-click="adicionaItem()">adicionar ítem</button> </form> http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/ O atributo ng-model está sendo utilizando novamente para definir um model para os inputs. O controller passa a receber diretamente informações sobre esses campos.
  • 19. ng-click ➤ A novidade dessa vez fica por conta do atributo ng-click, que recebe uma função que precisa ser declarada no controller: function ListaComprasController($scope) { $scope.itens = [ {produto: 'Leite', quantidade: 2, comprado: false}, {produto: 'Cerveja', quantidade: 12, comprado: false} ]; $scope.adicionaItem = function () { $scope.itens.push({produto: $scope.item.produto, quantidade: $scope.item.quantidade, comprado: false}); $scope.item.produto = $scope.item.quantidade = ''; }; } http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/
  • 20. Explicando ➤ Ao clicar no botão, o produto é adicionado à tabela. ➤ Aqui o model poderia estar realizando diversas validações disponíveis na API do framework entre outras coisas. ➤ Porém, no exemplo, apenas foi adicionado um novo item à lista de produtos e em seguida os models foram limpos (os campos do formulário).
  • 21. Teste ➤ Por ser um framework que demanda um código JavaScript mais estruturado, fica bem simples testar essa aplicação. Utilizando Jasmine (http://tableless.com.br/testando-seu- codigo-jquery-com-jasmine-parte-1/), por exemplo, poderia facilmente testar o controller dessa forma:
  • 22. describe('Lista Compras Unitário', function () { describe('ListaComprasController', function () { beforeEach(function () { this.$scope = {}; this.controller = new ListaComprasController(this.$scope); }); it('deve criar "itens" com 2 ítens', function () { expect(this.$scope.itens.length).toBe(2); }); describe('adicionaItem', function () { it('deve adicionar um novo ítem à lista com dados do escopo', function () { this.$scope.item = {}; this.$scope.item.produto = 'Carne'; this.$scope.item.quantidade = 5; this.$scope.adicionaItem(); expect(this.$scope.itens.length).toBe(3); expect(this.$scope.itens[2].produto).toBe('Carne'); expect(this.$scope.itens[2].quantidade).toBe(5); expect(this.$scope.itens[2].comprado).toBeFalse; }); }); }); }); http://tableless.com.br/criando-uma-aplicacao-simples-com-angularjs/