SPA Jumpstart - Angular - 5 - Diretivas Customizadas

15
Criando Diretivas

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 - 5 - Diretivas Customizadas

Page 1: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Criando Diretivas

Page 2: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasHTML vs Diretivas

Parte mais atrativa do AngularJS

HTML muito mais claro e

compreensível

Resume tsunami de tags para linguagem de

domínio específico

                              

<muitas-divs>     Conteudo </muitas-divs>

<div><div><div>       <div><div><div>             <div><div><div>                          Conteudo             </div></div></div>        </div></div></div> </div></div></div>

Page 3: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasPrimeira diretiva

Assim como controllers, diretivas são registradas no angular através de um módulo.

Tudo o que precisa fazer é retornar um objeto que será interpretado pelo framework

app.directive('alert', function() {             return { restrict: 'EA',                 template:'<h2>Hello angular-directives</h2'             };         });

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

Diretivas – CustomizadasRestrict

Define como ela será declarada

Deve ser uma simples string representando o tipo de declarativa

Pode escolher um tipo ou fazer combinações

Elemento:

restrict: 'E',

<alert/>

Atributo:

restrict: 'A',

<div alert><div/>

Classe:

restrict: 'C',

<div class="alert"><div/>

Misto:

restrict: 'EA',

<alert alert/>

Page 5: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasTemplate / templateUrl Basicamente inclui o template apontado no conteúdo do elemento.

     return {          template:'<h2>Hello angular-directives</h2>',          templateUrl:'alert-template.html'      };

Page 6: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasTransclude

Permite adicionar conteúdo dentro do elemento da diretiva

      return {         transclude:true,             };     

<alert type="warning">         <strong>Aviso!</strong> Pague a conta de luz!     </alert>

<div>         Conteudo: <div ng-transclude></div>     </div>

Diretiva: Template:

View: Output:

Page 7: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasReplace

Na renderização do HTML, substitui o elemento por seu conteúdo.

    return {        replace:true,     }; });

Diretiva: Output:

Page 8: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasLink

Praticamente o controlador da diretiva

“Liga” o DOM ao escopo da diretiva

    return {        link:function(scope, element, attributes) {             

        }     };

Page 9: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasLink

Parametros Scope ElementAttribute

s

    return {        link:function(scope, element, attributes) {             var type = attributes.type;             element.addClass('alert-' + type);         }     };

Page 10: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasScope

Porta-

voz

Strings “@”

Objetos “=”

Functions “&”

    return {       scope:{}     }; });

Page 11: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasScope - strings

Para passar uma string para a diretiva, este deve ser declarado no scope com a chave “@”;

  scope: {      type:'@'  }

Diretiva:

<div class ="alert alert-{{type}}"></div>

Template:

<alert type="warning"></alert>

View:

Page 12: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasScope - strings

app.directive('alert', function() {     return {         restrict: 'E',         templateUrl: 'alert-template-scope.html',         transclude: true,         scope: {            type:'@'        }      }; });

Diretiva:app.controller('avisoController', function() {           this.avisos = [               {type:'warning', titulo: 'Aviso',  descricao: 'Pague a conta de luz!' },               {type:'danger', titulo: 'Perigo',  descricao: 'Pague o aluguel!' },               {type:'info', titulo: 'Info',  descricao:'PH está terminando'}           ];       });

Controller:

<div class ="alert alert-{{type}}">     <button type="button"class="close">&times;</button>     <div ng-transclude></div>     <label>Resposta:</label>     <input ng-model="resposta" /> </div>

Template: <div ng-controller="avisoController as vm">     <div ng-repeat="item in vm.avisos">         <alert type="{{item.type}}">             <strong>{{item.titulo}}</strong>  {{item.descricao}}         </alert>     </div> </div>

View:

Page 13: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasScope - objetos

Para passar uma propriedade do controller esta deve ser declarada no scope com a chave “=”;

app.directive('alert', function() {           return {               restrict: 'E',               templateUrl: 'alert-template-scope.html‘,               scope: {                    aviso: '=',              }           };       });

<div ng-repeat="item in vm.avisos">            <alert aviso="item"></alert>         </div>

<div class ="alert alert-{{aviso.type}}">     <div> <strong>{{aviso.titulo}}</strong>  {{aviso.descricao}} </div></div>

Diretiva: Template:

View:

Page 14: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Diretivas – CustomizadasScope - funtions

Para passar uma função, esta deve ser declarado no scope com a chave “&”;

   scope: {       logtype:'&'   }

        <alert aviso="aviso"  logtype="vm.logAlert(aviso.descricao)"> </alert>     

<div class ="alert alert-{{aviso.type}}">    <button ng-click="logtype()">Log</button> </div>

self. logAlert = function (text) {               alert(text);           };

Diretiva: Controller:

View: Template:

Action-button

Page 15: SPA Jumpstart - Angular - 5 - Diretivas Customizadas

Wesley A.LemosLages/SC - 2014