SPA Jumpstart - Angular - 4 - Diretivas Nativas

20
Direti vas

description

Curso ministrado por mim na NDDigital sobre como iniciar uma aplicação AngularJS direcionada ao consumo de WebAPI, baseado neste fluxo: https://www.examtime.com/pt-BR/p/1084807 ::Table of Contents 1 - Introdução http://pt.slideshare.net/anisanwesley/angular-jumpstart-1-introduo-38460785 2 - Arquitetura http://pt.slideshare.net/anisanwesley/angular-jumpstart-2-arquitetura 3 - Controllers http://pt.slideshare.net/anisanwesley/angular-jumpstart-3-controllers 4 - Diretivas nativas http://pt.slideshare.net/anisanwesley/angular-jumpstart-4-diretivas-nativas 5 - Diretivas customizadas http://pt.slideshare.net/anisanwesley/angular-jumpstart-5-diretivas-customizadas 6 - Filters http://pt.slideshare.net/anisanwesley/angular-jumpstart-6-filters 7 - Validação http://pt.slideshare.net/anisanwesley/angular-jumpstart-7-validao 8 - Services http://pt.slideshare.net/anisanwesley/angular-jumpstart-8-services 9 - Modulos http://pt.slideshare.net/anisanwesley/angular-jumpstart-9-modulos 10 - Requests http://pt.slideshare.net/anisanwesley/angular-jumpstart-10-requests 11 - Roteamento http://pt.slideshare.net/anisanwesley/angular-jumpstart-11-roteamento

Transcript of SPA Jumpstart - Angular - 4 - Diretivas Nativas

Page 1: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas

Page 2: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Web Browser

ASP.NETAngularJS

Class LibraryBusiness

Index.htmlAppModule

RoutesDirectivies

TemplatesViews

ControllerViewModel

ServicesFactories

Repository

BreezeJS$resource$http

WebAPI

ApiController Services

Page 3: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas

Definição• Extensões do HTML (elementos, classes, atributos)• Permite ampliar o comportamento dos mesmos

O que fazem• Adicionam componentes e os manipulam• Encapsulam comportamentos genéricos e reutilizágeis• Deixam o HTML mais limpo e de fácil leitura

<div class="alert alert-warning alert-dismissable">     <button class="close" data-dismiss="alert">&times;</button>     <strong>Warning!</strong> HTML convencional </div>

<alert type="warning">     <strong>Warning!</strong> Muito mais limpo assim </alert>

Page 4: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas

Estruturais

• ng-app• ng-controller• ng-include

Bind

Eventos

Controle de Fluxo

Page 5: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Estruturang-app

Define o modulo da aplicação

ng-controller

Define um controller para determinada parte da aplicação

<html ng-app="app">

<body ng-controller="filterController as vm">

ng-include

Renderiza um trecho de html no DOM em tempo de execução

<div ng-include="'/../templates/titular.html'"></div>

Page 6: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Bind

Estruturais

• ng-app• ng-controller• ng-include

Bind

• ng-model • ng-href• ng-class• ng-src

Eventos

Controle de Fluxo

Page 7: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Bindng-model

Associa o valor de um componente à uma propriedade no viewmodel

Pode ser adicionado nas tags <input> de qualquer tipo (text, checkbox, date, number, radio, etc.)

<div ng-controller="nameController as vm">        Name: <input type="text" ng-model="vm.cliente.name" />        Saldo: <input type= "number" ng-model="vm.cliente.saldo" />        Tipo conta: <select ng-model="vm.cliente.tipo"  ng-options="tipo for tipo in vm.tiposConta"> </select>        Ativa: <input type="checkbox" ng-model="vm.cliente.ativa" />        <p><strong>Confirmação</strong></p>        Nome: {{vm.cliente.name}},        Saldo: {{vm.cliente.saldo}},        Tipo de conta: {{vm.cliente.tipo}},        ativa: {{vm.cliente.ativa}}</div>

app.controller('nameController',function() {             this.cliente = {                 titular: "José da Silva",                 saldo: 43243,                 tipo: 'corrente',                 ativa:true             };             this.tiposConta = [                 'corrente',                 'poupança',                 'especial'             ];         });

Page 8: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Bindng-href

Associa o valor de um link dinâmico

Permite usar o recurso {{espression}} na url

Funciona apenas em tags <a>

<div>         <input type="number" ng-model="dia" /> de <input type="text" ng-model="mes" />         <p>             <a ng-href="http://pt.wikipedia.org/wiki/{{dia}}_de_{{mes}}">                 <button>Ir para {{dia}} para {{mes}}</button>             </a>         </p>     </div>

Page 9: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Bindng-class

Ativa e desativa classes de acordo com condições definidas pelo viewmodel

Atributo recebe um objeto no formato {className : condition}

<div ng-class="{strike:excluido,red:saldo<0,bold:importante}">Status conta</div><input type="number" ng-model="saldo" />    <br /><input type="checkbox" ng-model="excluido" />Excluido    <br><input type="checkbox" ng-model="importante" />Importante

.strike {text-decoration: line-through;}

.bold {font-weight: bold;}

.red {color: red;}

Page 10: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Eventos

Estruturais

• ng-app• ng-controller• ng-include

Bind

• ng-model • ng-href• ng-class• ng-src

Eventos

• ng-checked• ng-disable• ng-click• ng-change

Controle de Fluxo

Page 11: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Eventosng-checked

Resolve o problema encoberto pelo ng-model quando se trata de hierarquia de checkboxes

Usando ng-model: <br> <input type="checkbox" ng-model="check1" /> Pai<input type="checkbox" ng-model="check1" /> Filho      Usando ng-checked: <br> <input type="checkbox" ng-model="check2" /> Pai <input type="checkbox" ng-checked="check2" /> Filho

Page 12: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Eventosng-disable

Desabilita componentes de acordo com condições definidas pelo viewmodel

Pode ser aplicado em

Inputs

Buttons

Checkboxes

Etc.

<p>Nome: <input /></p><p>CPF: <input ng-model="cpf" ng-disabled="cnpj" /></p><p>CNPJ: <input ng-model="cnpj" ng-disabled="cpf" /></p>

Page 13: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Eventosng-click

Invoca uma função do controller ao clicar no componente

Pode ser aplicado em qualquer tag

.controller('eventController', function() {          this.tipoPessoa = function (cpf) {              if (cpf) console.log("Pessoa física");              else console.log("Pessoa jurídica");          };      });

<div ng-controller =“eventController as vm"> <p>Nome: <input /></p>     <p>Type cpf <b>ou</b> cnpj</p>     <p>CPF: <input ng-model="cpf" ng-disabled="cnpj" /></p>     <p>CNPJ: <input ng-model="cnpj" ng-disabled="cpf" /></p>     <button ng-click="vm.tipoPessoa(cpf)">Verifica Tipo</button></div>

Page 14: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas - Eventosng-change

Observa uma variável e invoca uma função em caso de alteração desta

<p>Nome: <input /></p>     <p>CNPJ: <input ng-model="cnpj" ng-disabled="cpf" ng-change="vm.contador()" /></p>     Numero de alterações: {{vm.cont}}

.controller('eventController', function() {            this.cont = 0;            this.contador = function() {                this.cont++;            };        });

Page 15: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas – Controle de Fluxo

Estruturais

• ng-app• ng-controller• ng-include

Bind

• ng-model • ng-href• ng-class• ng-src

Eventos

• ng-checked• ng-disable• ng-click• ng-change

Controle de Fluxo

• ng-repeat• ng-transclude• ng-show/hide• ng-if

Page 16: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas – Controle de Fluxong-repeat

Repete um componente e todo seu conteúdo para cada item de um array do viewmodel

Equivalente ao foreach no C#

var fluxoController = function () {            var self = this;            self.clientes = [                { name: 'José da silva',   age: 50 },                { name: 'José da lima',    age: 32 },                { name: 'José da alberto', age: 54 },                { name: 'Correia lima',    age: 11 },                { name: 'Correia silva', age: 32 },                { name: 'Correia alberto', age: 41 }            ];        };        app.controller('fluxoController', fluxoController);

<body ng-controller="fluxoController as vm">     <table class="table table-striped">         <tr ng-repeat="person in vm.clientes">             <td>{{person.name}}</td>             <td>{{person.age}}</td>         </tr>     </table> </body>

Page 17: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas – Controle de Fluxong-repeat

Temos acesso à propriedades de controle desta diretiva:

$index

$last

$first

$odd

$even

$middle

<table class="table table-striped">        <tr ng-repeat="person in vm.clientes">            <td>                id: {{$index+1}}                <span ng-show="$even"> par</span>                <span ng-show="$odd"> impar</span>                <span ng-show="$first"> Primeiro</span>                <span ng-show="$last"> Utimo</span>            </td>  <td>               {{person.name}}            </td>            <td>{{person.age}}</td>        </tr>    </table>

Page 18: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas – Controle de Fluxong-hide / ng-show

Mostra ou oculta o componente se acordo com determinada condição

<table class="table table-striped">       <tr ng-repeat="person in vm.clientes">           <td>               <span ng-hide="person.age>=18">[DE MENOR]</span>               {{person.name}}           </td>           <td>{{person.age}}</td>       </tr>   </table>

Page 19: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Diretivas – Controle de Fluxong-if

Tem função semelhante ao ng-show e ng-hide

A diferença é que este remove o elemento do DOM, enquanto hide/show apenas aplicam a propriedade display : none !important

<table class="table table-striped">       <tr ng-repeat="person in vm.clientes">           <td>               <span ng-if="person.age<=18">[DE MENOR]</span>               {{person.name}}           </td>           <td>{{person.age}}</td>       </tr>   </table>

Page 20: SPA Jumpstart - Angular - 4 - Diretivas Nativas

Wesley A.LemosLages/SC - 2014