133
Sergio Azevedo [email protected] @sergioazevedo http://sagadoprogramador.com.br Abraçando o MVC Client Side Saturday, October 19, 13

AngularJS Abraçando o MVC Client-Side

Embed Size (px)

DESCRIPTION

Apresenta o framwork AngularJS, e aborda o porque de se adotar um framework web mvc.

Citation preview

Page 1: AngularJS Abraçando o MVC Client-Side

Sergio [email protected]

@sergioazevedohttp://sagadoprogramador.com.br

Abraçando o MVC Client Side

Saturday, October 19, 13

Page 2: AngularJS Abraçando o MVC Client-Side

Modelo

Arquitetura “padrão”de uma Aplicação Web

Server Side

Controlador

ViewTemplate

View Renderizada

Client Side http request

http response

html / json /xmlSaturday, October 19, 13

Page 3: AngularJS Abraçando o MVC Client-Side

Então qual o problema?Saturday, October 19, 13

Page 4: AngularJS Abraçando o MVC Client-Side

Qual o problema?JQuery resolve isso muito bem

Saturday, October 19, 13

Page 5: AngularJS Abraçando o MVC Client-Side

fonte: http://jster.nethttp://jster.net/blog/why-should-you-use-client-side-mvc-framework#.UmH4-ZTwIjE

“A necessidade de um framework MVC client-side, fica clara quando você começa a manipular em suas

páginas, não só HTML mas também dados.”

Saturday, October 19, 13

Page 6: AngularJS Abraçando o MVC Client-Side

E o framework MVC client-side que veremos hoje será:

Saturday, October 19, 13

Page 7: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL

Saturday, October 19, 13

Page 8: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

Saturday, October 19, 13

Page 9: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

Saturday, October 19, 13

Page 10: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

• Extende o HTML (Diretivas)

Saturday, October 19, 13

Page 11: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

• Extende o HTML (Diretivas)

• Usa abordagem declarativa para expressar logica nas views

Saturday, October 19, 13

Page 12: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

• Extende o HTML (Diretivas)

• Usa abordagem declarativa para expressar logica nas views

• Injeção de dependencias (de graça)

Saturday, October 19, 13

Page 13: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

• Extende o HTML (Diretivas)

• Usa abordagem declarativa para expressar logica nas views

• Injeção de dependencias (de graça)

• Two way data binding

Saturday, October 19, 13

Page 14: AngularJS Abraçando o MVC Client-Side

VISÃO GERAL• Framework MVC Javascript, para aplicações web dinamicas

• Suporta HTML 5

• Extende o HTML (Diretivas)

• Usa abordagem declarativa para expressar logica nas views

• Injeção de dependencias (de graça)

• Two way data binding

•Mantido pela Google

Saturday, October 19, 13

Page 15: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

Saturday, October 19, 13

Page 16: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

carrega o angular

Saturday, October 19, 13

Page 17: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

Saturday, October 19, 13

Page 18: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

bootstrap do angular

Saturday, October 19, 13

Page 19: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

Saturday, October 19, 13

Page 20: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

cria a variavel de modelo nome

Saturday, October 19, 13

Page 21: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

Saturday, October 19, 13

Page 22: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

exibe o conteudo da variavel nome

Saturday, October 19, 13

Page 23: AngularJS Abraçando o MVC Client-Side

COMEÇANDO<!doctype html><html ng-app> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>script> </head> <body> <div> <p>Digite seu nome: <input ng-model="nome" placeholder="Seu nome aqui..."></p> <p>{{nome}}</p> </div> </body></html>

Saturday, October 19, 13

Page 24: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

Saturday, October 19, 13

Page 25: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

1. O browser recebe o html e faz executa o DOM parser

Saturday, October 19, 13

Page 26: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

1. O browser recebe o html e faz executa o DOM parser

2. O browser carrega o script do angular.js

Saturday, October 19, 13

Page 27: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

1. O browser recebe o html e faz executa o DOM parser

2. O browser carrega o script do angular.js

3. Angular busca pela diretiva ng-app

Saturday, October 19, 13

Page 28: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

1. O browser recebe o html e faz executa o DOM parser

2. O browser carrega o script do angular.js

3. Angular busca pela diretiva ng-app

4. O angular cria o serviço de compilação da pagina ($compile) e o escopo raiz ($rootScope)

Saturday, October 19, 13

Page 29: AngularJS Abraçando o MVC Client-Side

WORK FLOW BASICO

1. O browser recebe o html e faz executa o DOM parser

2. O browser carrega o script do angular.js

3. Angular busca pela diretiva ng-app

4. O angular cria o serviço de compilação da pagina ($compile) e o escopo raiz ($rootScope)

5. Angular usa o $compile para compilar o DOM e liga-lo ao $rootScope. (HTML Compiler)

Saturday, October 19, 13

Page 30: AngularJS Abraçando o MVC Client-Side

HTML COMPILER

Saturday, October 19, 13

Page 31: AngularJS Abraçando o MVC Client-Side

HTML COMPILER

Compile: Percorre o DOM em busca de diretivas e entrega como resultado uma função de link

Saturday, October 19, 13

Page 32: AngularJS Abraçando o MVC Client-Side

HTML COMPILER

Compile: Percorre o DOM em busca de diretivas e entrega como resultado uma função de link

Link: Combina as diretivas com o escopo ($scope) e gera assim a visão. Qualquer atleração em um modelo de um scope será refletida na visão, assim como qualquer interação do usuario com a visão será refletida no scope.

Saturday, October 19, 13

Page 33: AngularJS Abraçando o MVC Client-Side

HTML COMPILER

Compile: Percorre o DOM em busca de diretivas e entrega como resultado uma função de link

Link: Combina as diretivas com o escopo ($scope) e gera assim a visão. Qualquer atleração em um modelo de um scope será refletida na visão, assim como qualquer interação do usuario com a visão será refletida no scope.

“Two way data binding”

Saturday, October 19, 13

Page 34: AngularJS Abraçando o MVC Client-Side

DIRETIVAS

Saturday, October 19, 13

Page 35: AngularJS Abraçando o MVC Client-Side

DIRETIVAS

• São o jeito angular de criar páginas dinamicas.

Saturday, October 19, 13

Page 36: AngularJS Abraçando o MVC Client-Side

DIRETIVAS

• São o jeito angular de criar páginas dinamicas.

• Angular usa uma abordagem declarativa para expressar o comportamento desejado dentro das views.

Saturday, October 19, 13

Page 37: AngularJS Abraçando o MVC Client-Side

DIRETIVAS

• São o jeito angular de criar páginas dinamicas.

• Angular usa uma abordagem declarativa para expressar o comportamento desejado dentro das views.

• Você deve focar em descrever o comportamento desejado.

Saturday, October 19, 13

Page 38: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS

Saturday, October 19, 13

Page 39: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

Saturday, October 19, 13

Page 40: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

Saturday, October 19, 13

Page 41: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

• ng-init - incializar uma variavel atribuindo um valor

Saturday, October 19, 13

Page 42: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

• ng-init - incializar uma variavel atribuindo um valor

• ng-repeat - o foreach do Angular

Saturday, October 19, 13

Page 43: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

• ng-init - incializar uma variavel atribuindo um valor

• ng-repeat - o foreach do Angular

• ng-click - registra um evento de click

Saturday, October 19, 13

Page 44: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

• ng-init - incializar uma variavel atribuindo um valor

• ng-repeat - o foreach do Angular

• ng-click - registra um evento de click

• ng-disable - recebe uma expressão que se avaliada positivamente desabilita o elemento.

Saturday, October 19, 13

Page 45: AngularJS Abraçando o MVC Client-Side

ALGUMAS DIRETIVAS• ng-app - bootstrap do angular

• ng-model - define/associa uma nova variavel no escopo corrente

• ng-init - incializar uma variavel atribuindo um valor

• ng-repeat - o foreach do Angular

• ng-click - registra um evento de click

• ng-disable - recebe uma expressão que se avaliada positivamente desabilita o elemento.

• ng-controller - delcara a criacao de um novo escopo de controlador.

Saturday, October 19, 13

Page 46: AngularJS Abraçando o MVC Client-Side

Exemplo:Exibir um text area e garantir que

o botao enviar so funcione quando o usuario preencher no

minimo 10 caracteres

Saturday, October 19, 13

Page 47: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Saturday, October 19, 13

Page 48: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

cria a variavel de descricao atribuindo o valor vazio

Saturday, October 19, 13

Page 49: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Saturday, October 19, 13

Page 50: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Associa o variavel ao conteudo do text area

Saturday, October 19, 13

Page 51: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Saturday, October 19, 13

Page 52: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

declara que a mensagem só pode ser exibida enquanto o usuario nao digitar no minimo 10 caracteres

Saturday, October 19, 13

Page 53: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Saturday, October 19, 13

Page 54: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

declara que o botao so deve estar habilitado se o texo ultrapasar o minimo de 10 caracteres

Saturday, October 19, 13

Page 55: AngularJS Abraçando o MVC Client-Side

EXEMPLO DIRETIVAS<!doctype html><html ng-app> <head> <script src="../angular.js"></script> </head> <body> <div ng-init="descricao =''"> <textarea ng-model="descricao">{{descricao}}</textarea> </div>

<p ng-show='descricao.length < 10'>Minimo de 10 caracteres</p> <div> <button ng-disabled="descricao.length < 10">Enviar</button> </div> </body></html>

Saturday, October 19, 13

Page 56: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

Saturday, October 19, 13

Page 57: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

Saturday, October 19, 13

Page 58: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

•Nao precisam herdar de nenhuma classe

Saturday, October 19, 13

Page 59: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

•Nao precisam herdar de nenhuma classe

• As responsabilidades de um controlador são:

Saturday, October 19, 13

Page 60: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

•Nao precisam herdar de nenhuma classe

• As responsabilidades de um controlador são:

• Incializar objetos do escopo ($scope). *(principal)

Saturday, October 19, 13

Page 61: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

•Nao precisam herdar de nenhuma classe

• As responsabilidades de um controlador são:

• Incializar objetos do escopo ($scope). *(principal)

• disponibilizar comportamento para UI através de funções ligadas ao $scope.

Saturday, October 19, 13

Page 62: AngularJS Abraçando o MVC Client-Side

CONTROLADORES

• São objetos Javascript convencionais

•Nao precisam herdar de nenhuma classe

• As responsabilidades de um controlador são:

• Incializar objetos do escopo ($scope). *(principal)

• disponibilizar comportamento para UI através de funções ligadas ao $scope.

Você deve ev

itar o uso d

e

ng-init. Faç

a as

inicializaçõ

es de modelo

dentro de co

ntroladores

Saturday, October 19, 13

Page 63: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

arquivo index2.html:

Saturday, October 19, 13

Page 64: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

carrega o arquivo que define o controlador

arquivo index2.html:

Saturday, October 19, 13

Page 65: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

arquivo index2.html:

Saturday, October 19, 13

Page 66: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

declara o uso do controlador

arquivo index2.html:

Saturday, October 19, 13

Page 67: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

arquivo index2.html:

Saturday, October 19, 13

Page 68: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

faz uso de uma funcao do $scope

faz uso de uma funcao do $scope

arquivo index2.html:

Saturday, October 19, 13

Page 69: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER<!doctype html><html ng-app> <head> <script src="../angular.js"></script> <script src="message-controller.js"></script> </head> <body ng-controller="MessageController"> <div> <textarea ng-model="descricao">{{descricao}}</textarea> </div> <p ng-show='naoTemQuantidadeMinimaDeCaractres()'>Minimo de 10 caracteres</p> <div>

<button ng-disabled="naoTemQuantidadeMinimaDeCaractres()">Enviar</button>

</div> </body></html>

arquivo index2.html:

Saturday, October 19, 13

Page 70: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

Saturday, October 19, 13

Page 71: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

incializa a variavel de escopo descricao

Saturday, October 19, 13

Page 72: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

Saturday, October 19, 13

Page 73: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

inclui uma funcao no $scope para ser utilizada na UI

Saturday, October 19, 13

Page 74: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

Saturday, October 19, 13

Page 75: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:declaracao do controlador recebendo $scope por parametro

Saturday, October 19, 13

Page 76: AngularJS Abraçando o MVC Client-Side

EXEMPLO USANDO CONTROLLER

function MessageController($scope){

$scope.descricao = "";

$scope.naoTemQuantidadeMinimaDeCaractres = function(){ return $scope.descricao.length < 10; }

}

arquivo message-controller.js:

Saturday, October 19, 13

Page 77: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)

Saturday, October 19, 13

Page 78: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

Saturday, October 19, 13

Page 79: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

• São conceitualmente parecidos com o ViewModel do padrão MVVM (Model View ViewModel)

Saturday, October 19, 13

Page 80: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

• São conceitualmente parecidos com o ViewModel do padrão MVVM (Model View ViewModel)

• Novos escopos são criados sempre que o Angular encontra a diretiva ng-controller

Saturday, October 19, 13

Page 81: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

• São conceitualmente parecidos com o ViewModel do padrão MVVM (Model View ViewModel)

• Novos escopos são criados sempre que o Angular encontra a diretiva ng-controller

• Todos os escopos possuem referencias para seus “pais”

Saturday, October 19, 13

Page 82: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

• São conceitualmente parecidos com o ViewModel do padrão MVVM (Model View ViewModel)

• Novos escopos são criados sempre que o Angular encontra a diretiva ng-controller

• Todos os escopos possuem referencias para seus “pais”

• Ou seja eles são organizados em uma arvore de escopos

Saturday, October 19, 13

Page 83: AngularJS Abraçando o MVC Client-Side

ESCOPOS ($SCOPE)• são objetos AngularJS usados para expor modelos (dados) e funções

para a view.

• São conceitualmente parecidos com o ViewModel do padrão MVVM (Model View ViewModel)

• Novos escopos são criados sempre que o Angular encontra a diretiva ng-controller

• Todos os escopos possuem referencias para seus “pais”

• Ou seja eles são organizados em uma arvore de escopos

• Onde o nó raiz é o $rootScope

Saturday, October 19, 13

Page 84: AngularJS Abraçando o MVC Client-Side

MODELOS

Saturday, October 19, 13

Page 85: AngularJS Abraçando o MVC Client-Side

MODELOS

• Modelos também sao objetos Javascript comuns.

Saturday, October 19, 13

Page 86: AngularJS Abraçando o MVC Client-Side

MODELOS

• Modelos também sao objetos Javascript comuns.

•Não é necessario herdar de nenhum tipo especifico

Saturday, October 19, 13

Page 87: AngularJS Abraçando o MVC Client-Side

MODELOS

• Modelos também sao objetos Javascript comuns.

•Não é necessario herdar de nenhum tipo especifico

•Na pratica qualquer variavel associada ao escopo é um modelo para o Angular

Saturday, October 19, 13

Page 88: AngularJS Abraçando o MVC Client-Side

MODELOS

• Modelos também sao objetos Javascript comuns.

•Não é necessario herdar de nenhum tipo especifico

•Na pratica qualquer variavel associada ao escopo é um modelo para o Angular

• É possivel utilizar como modelos, os seus objetos de dominio Javascript já existentes. Basta associa-los ao $scope.

Saturday, October 19, 13

Page 89: AngularJS Abraçando o MVC Client-Side

EXEMPLOS DE MODELOS

function OutroController($scope){

$scope.descricao = ""; //modelo

$scope.usuario = { nome: “Joao”, idade: 20 }; //modelo

$scope.cidades = [“rio de janeiro”,”sao paulo”]; //modelo

$scope.produto = new Produto(); //modelo*

}

arquivo outro-controller.js:

* considerando que exista a definição para o classe Produto.

Saturday, October 19, 13

Page 90: AngularJS Abraçando o MVC Client-Side

EXEMPLO:EXIBINDO UMA LISTAGEM DE

EMPREGADOS

Saturday, October 19, 13

Page 91: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

function EmpresaController($scope){

$scope.empregados = [ {nome: 'Zoraide', idade: 31}, {nome: 'Joao', idade: 20}, {nome: 'Maria', idade: 25}, {nome: 'Mario', idade: 30}, {nome: 'Flavia', idade: 22}, {nome: 'Percival', idade: 50}, {nome: 'Euclides', idade: 44}, {nome: 'Aristoteles', idade: 27} ];

}

arquivo empresa-controller.js:

Saturday, October 19, 13

Page 92: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

function EmpresaController($scope){

$scope.empregados = [ {nome: 'Zoraide', idade: 31}, {nome: 'Joao', idade: 20}, {nome: 'Maria', idade: 25}, {nome: 'Mario', idade: 30}, {nome: 'Flavia', idade: 22}, {nome: 'Percival', idade: 50}, {nome: 'Euclides', idade: 44}, {nome: 'Aristoteles', idade: 27} ];

}

arquivo empresa-controller.js:

Saturday, October 19, 13

Page 93: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

... <body> <div ng-controller="EmpresaController"> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>...

arquivo index.html:

Saturday, October 19, 13

Page 94: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

... <body> <div ng-controller="EmpresaController"> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>...

arquivo index.html:

Saturday, October 19, 13

Page 95: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

... <body> <div ng-controller="EmpresaController"> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>...

arquivo index.html:

Saturday, October 19, 13

Page 96: AngularJS Abraçando o MVC Client-Side

EXIBINDO A LISTAGEM DE EMPREGADOS.

PERMITINDO O CADASTRO DE NOVOS EMPREGADOS

Saturday, October 19, 13

Page 97: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

function EmpresaController($scope){

$scope.empregados = [ {nome: 'Zoraide', idade: 31}, {nome: 'Joao', idade: 20}, {nome: 'Maria', idade: 25}, {nome: 'Mario', idade: 30}, {nome: 'Flavia', idade: 22}, {nome: 'Percival', idade: 50}, {nome: 'Euclides', idade: 44}, {nome: 'Aristoteles', idade: 27} ];

$scope.adicionarEmpregado = function(){ var novo = {nome: $scope.nome, idade: $scope.idade}; $scope.empregados.push(novo); };

}

arquivo empresa-controller2.js:

Saturday, October 19, 13

Page 98: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

function EmpresaController($scope){

$scope.empregados = [ {nome: 'Zoraide', idade: 31}, {nome: 'Joao', idade: 20}, {nome: 'Maria', idade: 25}, {nome: 'Mario', idade: 30}, {nome: 'Flavia', idade: 22}, {nome: 'Percival', idade: 50}, {nome: 'Euclides', idade: 44}, {nome: 'Aristoteles', idade: 27} ];

$scope.adicionarEmpregado = function(){ var novo = {nome: $scope.nome, idade: $scope.idade}; $scope.empregados.push(novo); };

}

arquivo empresa-controller2.js:

Saturday, October 19, 13

Page 99: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='nome'/> <label>Idade</label><input ng-model='idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo index2.html:

Saturday, October 19, 13

Page 100: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='nome'/> <label>Idade</label><input ng-model='idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo index2.html:

Saturday, October 19, 13

Page 101: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='nome'/> <label>Idade</label><input ng-model='idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo index2.html:

Saturday, October 19, 13

Page 102: AngularJS Abraçando o MVC Client-Side

MELHORANDO O CODIGO

Saturday, October 19, 13

Page 103: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 104: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 105: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 106: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 107: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 108: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 109: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 110: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 111: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1function EmpresaController($scope){ $scope.novoEmpregado = new Empregado({});

$scope.empregados = obterListaDeEmpregados();

$scope.adicionarEmpregado = function(){ $scope.empregados.push($scope.novoEmpregado); $scope.novoEmpregado = new Empregado({}); };}

function obterListaDeEmpregados(){ var lista = [ new Empregado({nome: 'Zoraide', idade: 31}), new Empregado({nome: 'Joao', idade: 20}), new Empregado({nome: 'Maria', idade: 25}), new Empregado({nome: 'Mario', idade: 30}), new Empregado({nome: 'Flavia', idade: 22}), new Empregado({nome: 'Percival', idade: 50}), new Empregado({nome: 'Euclides', idade: 44}), new Empregado({nome: 'Aristoteles', idade: 27}) ]; return lista;}

function Empregado(args){ this.nome = args.nome || undefined; this.idade = args.idade || undefined;}

arquivo empresa-controller3.js:

Saturday, October 19, 13

Page 112: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='novoEmpregado.nome'/> <label>Idade</label><input ng-model='novoEmpregado.idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo index3.html:

Saturday, October 19, 13

Page 113: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='novoEmpregado.nome'/> <label>Idade</label><input ng-model='novoEmpregado.idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo index3.html:

Saturday, October 19, 13

Page 114: AngularJS Abraçando o MVC Client-Side

FILTROS

Saturday, October 19, 13

Page 115: AngularJS Abraçando o MVC Client-Side

FILTROS• São recursos do Angular para permitir a construção de

expressões mais complexas.

Saturday, October 19, 13

Page 116: AngularJS Abraçando o MVC Client-Side

FILTROS• São recursos do Angular para permitir a construção de

expressões mais complexas.

•O Angular ja vem “de fabrica” com alguns bons filtros.

Saturday, October 19, 13

Page 117: AngularJS Abraçando o MVC Client-Side

FILTROS• São recursos do Angular para permitir a construção de

expressões mais complexas.

•O Angular ja vem “de fabrica” com alguns bons filtros.

• São dividios em 2 tipos:

• Formating Filters

• currency, date, number, lowercase, uppercase e json

• Array Transforming filters

Saturday, October 19, 13

Page 118: AngularJS Abraçando o MVC Client-Side

ORDENANDO A LISTA DE EMPREGADOS

Saturday, October 19, 13

Page 119: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='nome'/> <label>Idade</label><input ng-model='idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados | orderBy:[nome]"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo filtro1.html:

Saturday, October 19, 13

Page 120: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> <div> <form> <label>Nome</label><input ng-model='nome'/> <label>Idade</label><input ng-model='idade'/> <button ng-click="adicionarEmpregado()">Incluir</button> </form> </div> <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados | orderBy:[nome]"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> </div>

arquivo filtro1.html:

Saturday, October 19, 13

Page 121: AngularJS Abraçando o MVC Client-Side

PESQUISANDO NA LISTA DE EMPREGADOS

Saturday, October 19, 13

Page 122: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> ... <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados |filter:criteria | orderBy:[nome]"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> <label> Pesquisar Por: <input ng-model="criteria"/> </div>

arquivo filtro2.html:

Saturday, October 19, 13

Page 123: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> ... <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados |filter:criteria | orderBy:[nome]"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> <label> Pesquisar Por: <input ng-model="criteria"/> </div>

arquivo filtro2.html:

Saturday, October 19, 13

Page 124: AngularJS Abraçando o MVC Client-Side

LISTA DE EMPREGADOS - 1

<div ng-controller="EmpresaController"> ... <div> <table> <tr> <th>Nome</th> <th>Idade</th> </tr> <tr ng-repeat="empregado in empregados |filter:criteria | orderBy:[nome]"> <td>{{empregado.nome}}</td> <td>{{empregado.idade}}</td> </tr> </table> </div> <label> Pesquisar Por: <input ng-model="criteria"/> </div>

arquivo filtro2.html:

Saturday, October 19, 13

Page 125: AngularJS Abraçando o MVC Client-Side

OUTROS RECURSOS DO ANGULAR

• Services

• $http, $timeout, $window, $route entre outros...

• Custom Directives

• Uma forma de extender o HTML, e criar seus proprios “componentes”

• Modules

• Factories

• Dependency Injection

Saturday, October 19, 13

Page 126: AngularJS Abraçando o MVC Client-Side

COMO FICA A COMUNICAÇÃO COM O SERVER SIDE?

JavaRuby.Net

Node.jsPhyton

JSON

Saturday, October 19, 13

Page 127: AngularJS Abraçando o MVC Client-Side

COMO FICA A COMUNICAÇÃO COM O SERVER SIDE?

JavaRuby.Net

Node.jsPhyton

JSON

Os serviços

$http e

$resource do

AngularJS,s

ão

opções para

realizar est

a

comunicação

Saturday, October 19, 13

Page 128: AngularJS Abraçando o MVC Client-Side

ANGULARJS NÃO É BALA DE PRATA

Saturday, October 19, 13

Page 129: AngularJS Abraçando o MVC Client-Side

CONSIDERAÇÕES

Saturday, October 19, 13

Page 130: AngularJS Abraçando o MVC Client-Side

CONSIDERAÇÕES

Cada caso é um caso, avalie bem antes de decidir que abordagem utilizar. Existem relatos positivos e negativos quanto ao uso de frameworks MVC client-side

Saturday, October 19, 13

Page 131: AngularJS Abraçando o MVC Client-Side

CONSIDERAÇÕES

Cada caso é um caso, avalie bem antes de decidir que abordagem utilizar. Existem relatos positivos e negativos quanto ao uso de frameworks MVC client-side

Client-Side MVC is not a silver bullet, é um post bem famoso

Saturday, October 19, 13

Page 132: AngularJS Abraçando o MVC Client-Side

CONSIDERAÇÕES

Cada caso é um caso, avalie bem antes de decidir que abordagem utilizar. Existem relatos positivos e negativos quanto ao uso de frameworks MVC client-side

Client-Side MVC is not a silver bullet, é um post bem famoso

http://mir.aculo.us/2013/02/26/client-side-mvc-is-not-a-silver-bullet

Saturday, October 19, 13

Page 133: AngularJS Abraçando o MVC Client-Side

Sergio [email protected]

@sergioazevedohttp://sagadoprogramador.com.br

Obrigado!

Saturday, October 19, 13