SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
carregando...
levante a mão!
<angular-js ng-talk="meet2brains"/>
HTML
              <html>

   <form>         <title>
                          <tr>
           <ul>
<span>            <option>
                           <td>
            <input>
 <a>
           <br>      <em>   <table>
<script>
            <strong>    <legend>
  <div>
    <select>           <button>
             <textarea>
<html>               <video>
                                                     <header>
   <form>         <title>
                          <tr>           <canvas>
           <ul>
<span>            <option>
                           <td>                         <audio>
            <input>
 <a>
           <br>      <em>                <section>
<script>                    <table>
                                                        <meter>
            <strong>    <legend>
  <div>                                   <menu>
    <select>           <button>                      <hgroup>
             <textarea>               <progress>
<ng-view>                   <ng-switch>


                  <html>               <video>
                                                     <header>
   <form>         <title>
                          <tr>           <canvas>
           <ul>
<span>            <option>
                           <td>                          <audio>
            <input>
 <a>
           <br>      <em>                <section>
<script>                    <table>
                                                         <meter>
            <strong>    <legend>
  <div>                                   <menu>
    <select>           <button>                      <hgroup>
             <textarea>               <progress>


             <minha-tag>                           ng-model=""
<body ng-app>
                                platéia
  <input ng-model="nome">

  <p>Olá, {{nome}}!</p>         Olá, platéia!
  <script href="angular.js"/>

</body>
<body ng-app>

  <input ng-model="nome">

  <p>Olá, {{nome}}!</p>

  <script href="angular.js"/>

</body>
<body ng-app>

  <input ng-model="nome">

  <p>Olá, {{nome}}!</p>

  <script href="angular.js"/>

</body>
<body ng-app>

  <input ng-model="nome">

  <p>Olá, {{nome}}!</p>

  <script href="angular.js"/>

</body>
mas... e   o   CONTROLLER?
function SorteadorController($scope) {

    $scope.numero = 0;

    $scope.sortearNumero = function () {
       $scope.numero =
          Math.floor(Math.random() * 100);
    };

}




                          sorteador-controller.js
<body ng-app>

  <div ng-controller="SorteadorController">

     <button ng-click="sortearNumero()">
       fazer sorteio!
     </button>

     <p>O número sorteado foi: {{numero}}</p>

  </div>

  <script href="angular.js"/>
  <script href="sorteador-controller.js"/>

</body>
<body ng-app>

  <div ng-controller="SorteadorController">

     <button ng-click="sortearNumero()">
       fazer sorteio!
     </button>

     <p>O número sorteado foi: {{numero}}</p>

  </div>

  <script href="angular.js"/>
  <script href="sorteador-controller.js"/>

</body>
<body ng-app>

  <div ng-controller="SorteadorController">

     <button ng-click="sortearNumero()">
       fazer sorteio!
     </button>

     <p>O número sorteado foi: {{numero}}</p>

  </div>

  <script href="angular.js"/>
  <script href="sorteador-controller.js"/>

</body>
<body ng-app>

  <div ng-controller="SorteadorController">

     <button ng-click="sortearNumero()">
       fazer sorteio!
     </button>

     <p>O número sorteado foi: {{numero}}</p>

  </div>

  <script href="angular.js"/>
  <script href="sorteador-controller.js"/>

</body>
MVC
MVC
$scope.model = {
   id: 1,
   nome: 'Farfinhos',
   idade: 18
};
MVC
<ul>

  <li ng-repeat="usuario in usuarios">
    {{usuario.id}} - {{usuario.nome}}
  </li>

</ul>
MVC
function Controller($scope) {

    $scope.model = { ... };

    $scope.handlerClick =
         function () { ... };
}
APP
APP   Controller
Serviço




APP   Controller
Serviço




APP   Controller




       <view>
Serviço




APP   Controller




       <view>
        filters
Como usar isso tudo para montar uma
      aplicação single-page?
cria-se uma aplicação...
window.appTalk = angular.module('appTalk', []);
window.appTalk = angular.module('appTalk', []);




  <div ng-app="appTalk">
    ...
  </div>
cria-se controllers...
window.appTalk
   .controller('SobreController', [
     '$scope',
     function ($scope){

        ... código do controller ...

    }
  ]);
cria-se serviços...
window.appTalk
   .service('ServicoNecessario',
     function (){

       this.funcionalidade = function ()
  {...};

       ... código do serviço ...


     });
cria-se templates...
<div>
  Detalhes sobre {{nome}}: <br>
  {{info}}
</div>
configura-se as rotas...
window.appTalk = angular
   .module('appTalk', [])
   .config(['$routeProvider',
     function ($routeProvider) {
        $routeProvider
        .when('/sobre', {
           templateUrl: 'sobre.html',
           controller: 'SobreController'
        })
        .when('/home', {
           templateUrl: 'home.html',
           controller: 'HomeController'
        })
        .otherwise({redirectTo: '/home});
   }]);
window.appTalk = angular
   .module('appTalk', [])
   .config(['$routeProvider',
     function ($routeProvider) {
        $routeProvider
        .when('/sobre', {
           templateUrl: 'sobre.html',
           controller: 'SobreController'
        })
        .when('/home', {
           templateUrl: 'home.html',
           controller: 'HomeController'
        })
        .otherwise({redirectTo: '/home});
   }]);
window.appTalk = angular
   .module('appTalk', [])
   .config(['$routeProvider',
     function ($routeProvider) {
        $routeProvider
        .when('/sobre', {
           templateUrl: 'sobre.html',
           controller: 'SobreController'
        })
        .when('/home', {
           templateUrl: 'home.html',
           controller: 'HomeController'
        })
        .otherwise({redirectTo: '/home});
   }]);
window.appTalk = angular
   .module('appTalk', [])
   .config(['$routeProvider',
     function ($routeProvider) {
        $routeProvider
        .when('/sobre', {
           templateUrl: 'sobre.html',
           controller: 'SobreController'
        })
        .when('/home', {
           templateUrl: 'home.html',
           controller: 'HomeController'
        })
        .otherwise({redirectTo: '/home});
   }]);
e o DOM?
daqui pra frente,
a mágica desaparece
diretiva
Serviço




APP               Controller

      diretivas

                   <view>
                    filters
Serviço




APP               Controller

      diretivas      scope



                   <view>
                    filters
Serviço

       $injector



APP                Controller

      diretivas

                    <view>
                     filters
E - Elemento:
   <my-directive></my-directive>

A - Atributo:
   <div my-directive="exp"> </div>

C - Classe:
   <div class="my-directive: exp;"></div>

M - Comentário:
   <!-- directive: my-directive exp -->
<DOM>
<DOM>



COMPILE
<DOM>



COMPILE


 LINK
<DOM>



COMPILE


 LINK
window.appTalk.directive(
    'directiveName', function factory(injectables) {
 var definicaoDeDiretiva = {
   priority: 0,
    template: '<div></div>',
   templateUrl: 'directive.html',
   replace: false,
   transclude: false,
   restrict: 'A',
   scope: false,
   compile: function compile(tElement, tAttrs, transclude) {
       return {
         pre: function preLink() { ... },
         post: function postLink() { ... }
       }
    },
   link: function postLink(scope, iElement, iAttrs) { ... }
 };

 return definicaoDeDiretiva;
});
leaky abstraction
Obrigado!
mas espere...


        Henrique Netto
cursosdante
@gmail.com


       Henrique Netto

Mais conteúdo relacionado

Mais procurados

Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
Eduardo Shiota Yasuda
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Comunidade NetPonto
 

Mais procurados (20)

Introdução ao framework CakePHP
Introdução ao framework CakePHPIntrodução ao framework CakePHP
Introdução ao framework CakePHP
 
Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)
 
Autenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemandAutenticação com AngularJS e loadOnDemand
Autenticação com AngularJS e loadOnDemand
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007
 
Automação de Testes com AngularJS
Automação de Testes com AngularJSAutomação de Testes com AngularJS
Automação de Testes com AngularJS
 
Design Patterns em Ruby
Design Patterns em RubyDesign Patterns em Ruby
Design Patterns em Ruby
 
Criando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zeroCriando uma arquitetura de front-end do zero
Criando uma arquitetura de front-end do zero
 
Scope AngularJS
Scope AngularJSScope AngularJS
Scope AngularJS
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Asp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 PtAsp.Net Mvc Dev Days09 V3 Pt
Asp.Net Mvc Dev Days09 V3 Pt
 
Facelets
FaceletsFacelets
Facelets
 
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
Apresentação sobre Bootstrap na Maratona de Inovação ISITEC 2017
 
O Poderoso AngularJS
O Poderoso AngularJSO Poderoso AngularJS
O Poderoso AngularJS
 
Vue.js
Vue.jsVue.js
Vue.js
 
Criando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJSCriando aplicações Single-Page com AngularJS
Criando aplicações Single-Page com AngularJS
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Node.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo BranasNode.js - #6 - Core Modules - net - Rodrigo Branas
Node.js - #6 - Core Modules - net - Rodrigo Branas
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 

Destaque

Pengertian algoritma lengkap by.artayahonest
Pengertian algoritma lengkap by.artayahonestPengertian algoritma lengkap by.artayahonest
Pengertian algoritma lengkap by.artayahonest
Artaya Honest
 
Grammar book for spanish
Grammar book for spanishGrammar book for spanish
Grammar book for spanish
annpear
 
T ugas 7 daya guna website dengan blog-artayahonest-imk
T ugas 7 daya guna website dengan blog-artayahonest-imkT ugas 7 daya guna website dengan blog-artayahonest-imk
T ugas 7 daya guna website dengan blog-artayahonest-imk
Artaya Honest
 
Persentasi Desain Web-Pariwisata UNUD 2013
Persentasi Desain Web-Pariwisata UNUD 2013Persentasi Desain Web-Pariwisata UNUD 2013
Persentasi Desain Web-Pariwisata UNUD 2013
Artaya Honest
 
Proposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonestProposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonest
Artaya Honest
 
Manajemen jaringan server c kelompok 4-artayahonest
Manajemen jaringan server c   kelompok 4-artayahonestManajemen jaringan server c   kelompok 4-artayahonest
Manajemen jaringan server c kelompok 4-artayahonest
Artaya Honest
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
annpear
 
Proposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonestProposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonest
Artaya Honest
 
Simply me! --edu1103
Simply me!  --edu1103Simply me!  --edu1103
Simply me! --edu1103
BrieHoover
 

Destaque (20)

ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDAANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
ANGULARJS: UM FRAMEWORK PARA FACILITAR SUA VIDA
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Pengertian algoritma lengkap by.artayahonest
Pengertian algoritma lengkap by.artayahonestPengertian algoritma lengkap by.artayahonest
Pengertian algoritma lengkap by.artayahonest
 
Best Italian Wedding Venues & Planner
Best Italian Wedding Venues & Planner Best Italian Wedding Venues & Planner
Best Italian Wedding Venues & Planner
 
Grammar book for spanish
Grammar book for spanishGrammar book for spanish
Grammar book for spanish
 
T ugas 7 daya guna website dengan blog-artayahonest-imk
T ugas 7 daya guna website dengan blog-artayahonest-imkT ugas 7 daya guna website dengan blog-artayahonest-imk
T ugas 7 daya guna website dengan blog-artayahonest-imk
 
Només tenim una oportunitat
Només tenim una oportunitatNomés tenim una oportunitat
Només tenim una oportunitat
 
Ringkasan ramayana by artaya honest
Ringkasan ramayana by artaya honestRingkasan ramayana by artaya honest
Ringkasan ramayana by artaya honest
 
Persentasi Desain Web-Pariwisata UNUD 2013
Persentasi Desain Web-Pariwisata UNUD 2013Persentasi Desain Web-Pariwisata UNUD 2013
Persentasi Desain Web-Pariwisata UNUD 2013
 
Proposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonestProposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonest
 
GMIA - increasing you online digital music sales
GMIA - increasing you online digital music salesGMIA - increasing you online digital music sales
GMIA - increasing you online digital music sales
 
windows App development
windows App developmentwindows App development
windows App development
 
Photoshop design to xhtml
Photoshop design to xhtmlPhotoshop design to xhtml
Photoshop design to xhtml
 
Manajemen jaringan server c kelompok 4-artayahonest
Manajemen jaringan server c   kelompok 4-artayahonestManajemen jaringan server c   kelompok 4-artayahonest
Manajemen jaringan server c kelompok 4-artayahonest
 
Grammar book
Grammar bookGrammar book
Grammar book
 
Grammar book 2
Grammar book 2Grammar book 2
Grammar book 2
 
Proposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonestProposaldesain web.imk artayahonest
Proposaldesain web.imk artayahonest
 
Simply me! --edu1103
Simply me!  --edu1103Simply me!  --edu1103
Simply me! --edu1103
 
traffic attorney Austin
traffic attorney Austintraffic attorney Austin
traffic attorney Austin
 
Occupational drivers license austin 
Occupational drivers license austin Occupational drivers license austin 
Occupational drivers license austin 
 

Semelhante a Angular JS, você precisa conhecer

Semelhante a Angular JS, você precisa conhecer (20)

Angular js
Angular jsAngular js
Angular js
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
LPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdfLPII_Aula_7-JQuery.pdf
LPII_Aula_7-JQuery.pdf
 
Simplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na práticaSimplificando o full stack - desenvolvimento web na prática
Simplificando o full stack - desenvolvimento web na prática
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
PHP básico para iniciantes
PHP básico para iniciantesPHP básico para iniciantes
PHP básico para iniciantes
 
jQuery - Visão Geral
jQuery - Visão GeraljQuery - Visão Geral
jQuery - Visão Geral
 
Http Servlet
Http ServletHttp Servlet
Http Servlet
 
Android com estilo - GDG Dev Fest 2015
Android com estilo - GDG Dev Fest 2015Android com estilo - GDG Dev Fest 2015
Android com estilo - GDG Dev Fest 2015
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
Tutorial.yii
Tutorial.yiiTutorial.yii
Tutorial.yii
 
Bread board
Bread boardBread board
Bread board
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Introdução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, AjaxIntrodução a HTML, CSS, JS, Ajax
Introdução a HTML, CSS, JS, Ajax
 

Mais de meet2Brains

Mais de meet2Brains (20)

Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?Por que minha empresa deve construir um planejamento digital?
Por que minha empresa deve construir um planejamento digital?
 
Marketing digital, quem precisa?
Marketing digital, quem precisa?Marketing digital, quem precisa?
Marketing digital, quem precisa?
 
Design sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design aconteceDesign sem Designer: como, onde e por que o Design acontece
Design sem Designer: como, onde e por que o Design acontece
 
Cutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundoCutesquares: De Cuteland para o mundo
Cutesquares: De Cuteland para o mundo
 
Como ser um bom programador
Como ser um bom programadorComo ser um bom programador
Como ser um bom programador
 
Programando para o Google Chrome
Programando para o Google ChromeProgramando para o Google Chrome
Programando para o Google Chrome
 
E-commerce: indo além da tecnologia
E-commerce: indo além da tecnologiaE-commerce: indo além da tecnologia
E-commerce: indo além da tecnologia
 
Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!Mídias Sociais não é só Facebook!
Mídias Sociais não é só Facebook!
 
PicPay: uma nova forma de comprar
PicPay: uma nova forma de comprarPicPay: uma nova forma de comprar
PicPay: uma nova forma de comprar
 
Projetar pensando na experiência do usuário
Projetar pensando na experiência do usuárioProjetar pensando na experiência do usuário
Projetar pensando na experiência do usuário
 
Desenvolvimento Ágil com Ruby on Rails
Desenvolvimento  Ágil com Ruby on  RailsDesenvolvimento  Ágil com Ruby on  Rails
Desenvolvimento Ágil com Ruby on Rails
 
Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?Mobile: o que já está acontecendo e o que é futuro?
Mobile: o que já está acontecendo e o que é futuro?
 
Rock pigeon - do zero até o começo
Rock pigeon - do zero até o começoRock pigeon - do zero até o começo
Rock pigeon - do zero até o começo
 
Métricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitasMétricas Web com Google Analytics: indo muito além das visitas
Métricas Web com Google Analytics: indo muito além das visitas
 
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
Negócios para Desenvolvedores e Designers: abordagens práticas de mercado dig...
 
Getting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucessoGetting Real: conceitos para construir projetos de sucesso
Getting Real: conceitos para construir projetos de sucesso
 
Desenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigmaDesenvolvendo para windows phone, um novo paradigma
Desenvolvendo para windows phone, um novo paradigma
 
De serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commerceDe serviço a produto com uma plataforma de e-commerce
De serviço a produto com uma plataforma de e-commerce
 
WebApps e Frameworks Javascript
WebApps e Frameworks JavascriptWebApps e Frameworks Javascript
WebApps e Frameworks Javascript
 
De aprendizado à utilidade pública
De aprendizado à utilidade públicaDe aprendizado à utilidade pública
De aprendizado à utilidade pública
 

Angular JS, você precisa conhecer

  • 4.
  • 5. HTML <html> <form> <title> <tr> <ul> <span> <option> <td> <input> <a> <br> <em> <table> <script> <strong> <legend> <div> <select> <button> <textarea>
  • 6. <html> <video> <header> <form> <title> <tr> <canvas> <ul> <span> <option> <td> <audio> <input> <a> <br> <em> <section> <script> <table> <meter> <strong> <legend> <div> <menu> <select> <button> <hgroup> <textarea> <progress>
  • 7. <ng-view> <ng-switch> <html> <video> <header> <form> <title> <tr> <canvas> <ul> <span> <option> <td> <audio> <input> <a> <br> <em> <section> <script> <table> <meter> <strong> <legend> <div> <menu> <select> <button> <hgroup> <textarea> <progress> <minha-tag> ng-model=""
  • 8. <body ng-app> platéia <input ng-model="nome"> <p>Olá, {{nome}}!</p> Olá, platéia! <script href="angular.js"/> </body>
  • 9. <body ng-app> <input ng-model="nome"> <p>Olá, {{nome}}!</p> <script href="angular.js"/> </body>
  • 10. <body ng-app> <input ng-model="nome"> <p>Olá, {{nome}}!</p> <script href="angular.js"/> </body>
  • 11. <body ng-app> <input ng-model="nome"> <p>Olá, {{nome}}!</p> <script href="angular.js"/> </body>
  • 12. mas... e o CONTROLLER?
  • 13. function SorteadorController($scope) { $scope.numero = 0; $scope.sortearNumero = function () { $scope.numero = Math.floor(Math.random() * 100); }; } sorteador-controller.js
  • 14. <body ng-app> <div ng-controller="SorteadorController"> <button ng-click="sortearNumero()"> fazer sorteio! </button> <p>O número sorteado foi: {{numero}}</p> </div> <script href="angular.js"/> <script href="sorteador-controller.js"/> </body>
  • 15. <body ng-app> <div ng-controller="SorteadorController"> <button ng-click="sortearNumero()"> fazer sorteio! </button> <p>O número sorteado foi: {{numero}}</p> </div> <script href="angular.js"/> <script href="sorteador-controller.js"/> </body>
  • 16. <body ng-app> <div ng-controller="SorteadorController"> <button ng-click="sortearNumero()"> fazer sorteio! </button> <p>O número sorteado foi: {{numero}}</p> </div> <script href="angular.js"/> <script href="sorteador-controller.js"/> </body>
  • 17. <body ng-app> <div ng-controller="SorteadorController"> <button ng-click="sortearNumero()"> fazer sorteio! </button> <p>O número sorteado foi: {{numero}}</p> </div> <script href="angular.js"/> <script href="sorteador-controller.js"/> </body>
  • 18. MVC
  • 19. MVC $scope.model = { id: 1, nome: 'Farfinhos', idade: 18 };
  • 20. MVC <ul> <li ng-repeat="usuario in usuarios"> {{usuario.id}} - {{usuario.nome}} </li> </ul>
  • 21. MVC function Controller($scope) { $scope.model = { ... }; $scope.handlerClick = function () { ... }; }
  • 22. APP
  • 23. APP Controller
  • 24. Serviço APP Controller
  • 25. Serviço APP Controller <view>
  • 26. Serviço APP Controller <view> filters
  • 27. Como usar isso tudo para montar uma aplicação single-page?
  • 30. window.appTalk = angular.module('appTalk', []); <div ng-app="appTalk"> ... </div>
  • 32. window.appTalk .controller('SobreController', [ '$scope', function ($scope){ ... código do controller ... } ]);
  • 34. window.appTalk .service('ServicoNecessario', function (){ this.funcionalidade = function () {...}; ... código do serviço ... });
  • 36. <div> Detalhes sobre {{nome}}: <br> {{info}} </div>
  • 38. window.appTalk = angular .module('appTalk', []) .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/sobre', { templateUrl: 'sobre.html', controller: 'SobreController' }) .when('/home', { templateUrl: 'home.html', controller: 'HomeController' }) .otherwise({redirectTo: '/home}); }]);
  • 39. window.appTalk = angular .module('appTalk', []) .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/sobre', { templateUrl: 'sobre.html', controller: 'SobreController' }) .when('/home', { templateUrl: 'home.html', controller: 'HomeController' }) .otherwise({redirectTo: '/home}); }]);
  • 40. window.appTalk = angular .module('appTalk', []) .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/sobre', { templateUrl: 'sobre.html', controller: 'SobreController' }) .when('/home', { templateUrl: 'home.html', controller: 'HomeController' }) .otherwise({redirectTo: '/home}); }]);
  • 41. window.appTalk = angular .module('appTalk', []) .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/sobre', { templateUrl: 'sobre.html', controller: 'SobreController' }) .when('/home', { templateUrl: 'home.html', controller: 'HomeController' }) .otherwise({redirectTo: '/home}); }]);
  • 43. daqui pra frente, a mágica desaparece
  • 45. Serviço APP Controller diretivas <view> filters
  • 46. Serviço APP Controller diretivas scope <view> filters
  • 47. Serviço $injector APP Controller diretivas <view> filters
  • 48. E - Elemento: <my-directive></my-directive> A - Atributo: <div my-directive="exp"> </div> C - Classe: <div class="my-directive: exp;"></div> M - Comentário: <!-- directive: my-directive exp -->
  • 49. <DOM>
  • 53. window.appTalk.directive( 'directiveName', function factory(injectables) { var definicaoDeDiretiva = { priority: 0, template: '<div></div>', templateUrl: 'directive.html', replace: false, transclude: false, restrict: 'A', scope: false, compile: function compile(tElement, tAttrs, transclude) { return { pre: function preLink() { ... }, post: function postLink() { ... } } }, link: function postLink(scope, iElement, iAttrs) { ... } }; return definicaoDeDiretiva; });
  • 55. Obrigado! mas espere... Henrique Netto
  • 56. cursosdante @gmail.com Henrique Netto