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/

Java script aula 10 - angularjs

  • 1.
    ANGULARJS por: Cristiano PiresMartins 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/
  • 4.
  • 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> <scriptsrc= "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> <htmllang="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 ➤ AngularJSstarts 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 ➤ Asyou 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 ➤ AngularJSexpressions 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ão1.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 ➤ Umaaplicaçã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 ➤ Essapropriedade 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! ➤ Chegoua 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 <divng-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 novidadesforam 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 ➤ Paranã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 novidadedessa 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 clicarno 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 serum 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/
  • 23.