SlideShare una empresa de Scribd logo
1 de 41
Angular Avanzado
Sesion 1

Sergio Castillo Yrizales
@scyrizales
Agenda
 Arquitectura de Angular
 Routing
 Explicando la Magia

2
Arquitectura de Angular

3
Ejemplo de Clase
 Convertir la barra de menu estatica
 Seleccionar y cambiar el color del link seleccionado
 Mostrar en la parte inferior el vinculo seleccionado
 No usar nada de javascript

4
Modulo
 Es el punto de partida para la organización de

código en Angular
 Se indica en la directiva ng-app

5
Data Binding “BiDireccional”

6
Entendiendo las controladoras
 Mediante el $scope se define el viewmodel inicial
 Las funciones del scope pueden ser usadas

como manejadores de eventos

7
Inyeccion de dependencias
 Angular gestiona automáticamente que servicio

llamar
 Sin embargo es mejor hacer lo siguiente:

8
$scope
 Este servicio sirve para unir la data a la vista
 Contexto para las expresiones usadas en la vista
 Provee un metodo para “observar” los cambios
 Provee un método para recibir cambios desde

“afuera”.

9
Usando $watch
 El método $watch (forma parte del scope) sirve

para verificar cambios en alguna propiedad del
scope.
 La sintaxis es:
 $scope.$watch(„propiedad‟, function(value){ });
 La funcion suscrita es la forma de realizar los

cambios necesarios ante un cambio en la
propiedad suscrita
 Se puede usar para verificar cambios en

propiedades de la controladora padre inclusive.
10
La controladora no:
 Realiza cambios en el DOM
 Formatea el input (form controls)
 Filtra el output (filters)
 Comparte código con otras

11
Entendiendo las vistas
 Las vistas sirven para mostrar el viewmodel.
 Existen muchas directivas para lograr el

comportamiento requerido
 Directivas en Angular:
 http://docs.angularjs.org/api/

12
Routing

13
Ejemplo de Clase
 Construir un carrito de compras:
 Categorias
 Productos
 Cantidades
 Checkout

14
El botón atrás.
 El browser no sabe nada acerca de las vistas
 El browser siempre va a regresar a la pagina

anterior
 Si hubieron varias vistas, lástima.

15
Manejando la Historia
 El browser tiene que saber que hay interacciones
 Tenemos que controlar el evento Hashchanged

16
$routeProvider
 Sirve para añadir nuevas rutas
 Dos métodos
 when
 otherwhise

17
$routeProvider.when
Parametro
path

La ruta que se compara contra $location.path

route

18

Descripción
Objeto con diversas propiedades que indican varios tipos
de configuraciones:
•controller: La controladora a usar.
•template: String que define el template a usar
•templateUrl: ruta fisica de donde cargar un template
•redirectTo: manejar redirecciones dentro de angular
$routeProvider.otherwise
 Define ruta por defecto.
 Recibe como parametro un objeto route

(explicado en la anterior diapositiva)

19
ng-view
 Directiva que se usa como contenedor de las

vistas a renderizar

20
Partial Inline templates
 Se puede definir un template dentro del

documento con el que trabajamos.
 Usamos la etiqueta script junto con el tipo
text/ng-template

21
Ejemplo: Carrito con Routing
 http://jsfiddle.net/scyrizales/sHP48/

22
Explicando la magia

23
Explicando el Data Binding
 Cada vez que cambia el scope, se actualiza la

vista.
 Cada vez que un “major event” sucede en la

aplicación, y luego de que sucede, se ejecuta
una operación “digest” y se actualiza el scope

24
Major Events
 Entradas de usuario:
 Mouse, keyboard, etc.

 Eventos de Navegador:
 timeout, blur, etc.

 Llamadas Ajax:
 json, templates, etc…

25
$apply, $digest and $$phase
 $digest es un metodo interno que realiza la

verificación de los cambios entre la vista y el
scope y hace las respectivas actualizaciones al
scope
 $apply sirve para llamar desde fuera al $digest.

Cuando usamos otras librerias externas, es
necesario llamar a $apply
 $$phase es un indicador de si esta corriendo un
26

$digest. Debemos tenerlo en cuenta para no
aplicar $apply porque nos dará un error.
Llamando a Angular desde fuera
 angular.element(domElement).scope()
 Sobre este scope, podemos aplicar las funciones

$apply y $digest.

27
SafeApply
 Para evitar los problemas de usar el $apply

podemos crear esta función en el rootScope

28
Contruyamos un blog
 Listado de entradas
 Agregar nuevos posts (eliminarlos y modificarlos)

29
Directivas

30
¿Qué es una Directiva?
 Las directivas es lo que hace diferente a

AngularJS
 Permiten encapsular funcionalidad en puro html.

31
Razones para escribir directivas
 Necesidades especiales

 Imaginen poder usar este código para compartir un

mismo formulario en cualquier parte de su
aplicación

32
Razones para escribir directivas
 Encapsular un plugin de otra libreria
 La directiva no existe
 Las directivas que existen no cumplen con las

necesidades.

33
¿Como crear Directivas?

34
Valores de las propiedades
Propiedad
restrict

Puede ser A,E,C y M que significan
attribute, element, class, o comment

scope

Cada subpropiedad puede tener cualquiera de estos 3
valores:
•@: el valor es de un solo sentido
•=: el valor es de dos sentidos
•&: guarda una referencia a una función o expresión

template

La base para escribir el código que usará la directiva

replace

Boolean que indica si se debe reemplazar el html original
por el html generado por el template

transclude

Indica si se debe preservar el contenido de la declaración
de la directiva en el html original, se usa en conjunto con
ng-transclude

controller
35

Valor

La controladora que se usara para darle ambito al template,
no siempre es necesario
Valores de las propiedades
Propiedad
requires

Indica si una directiva depende de otra

link

36

Valor
Función que realiza la configuración inicial de la directiva.
Recibe cuatro parametros:
function link(scope, iElement, iAttrs, controller)
•scope: indica el objeto creado por la propiedad scope.
•iElement: se refiere al objeto base de la controladora. Este
vienen encapsulado en jqLite o Jquery (si es que se incluyo
en el proyecto)
•iAttrs: los atributos que se asignaron al html original de la
directiva declarada
•Controller: el controller de la directiva padre. Solo cuando
se ha establecido la propiedad requires
Jerarquía de scopes
 Al usar directivas, se crean nuevos scopes, o se

heredan los scopes padres.
 Si al definir la directiva, no se usa la propiedad
scope, la directiva crea un nuevo scope que
hereda todas las propiedades del scope de la
controladora que contiene a la directiva.
 Al momento de usar la propiedad scope, se
pierde toda conexión con el scope padre, y se
genera un scope independiente para la directiva.

37
Usando $watch
 El método $watch (forma parte del scope) sirve

para verificar cambios en alguna propiedad del
scope.
 La sintaxis es:
 $scope.$watch(„propiedad‟, function(value){ });
 La funcion suscrita es la forma de realizar los

cambios necesarios ante un cambio en la
propiedad suscrita
 Se puede usar para verificar cambios en

propiedades de la controladora padre inclusive.
38
Ejemplos (Directiva Simple)
 Hagamos una calculadora
 http://jsfiddle.net/scyrizales/mUJhL/

39
Ejemplos (Directiva Simple)
 Hagamos un time formatter
 http://jsfiddle.net/scyrizales/rUbsE/

40
Ejemplos (Directiva Anidada)
 Hagamos un tab panel
 http://jsfiddle.net/scyrizales/6C6Mv/

41

Más contenido relacionado

La actualidad más candente

Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJSOscar Gensollen
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJSLuis Natividad
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJSCarlos Azaustre
 
Taller de Angular JS: La solución tecnológica perfecta
Taller de Angular JS: La solución tecnológica perfectaTaller de Angular JS: La solución tecnológica perfecta
Taller de Angular JS: La solución tecnológica perfectaOpenExpoES
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJSAdrián Paredes
 
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)Nacho García Fernández
 
Curso AngularJS - 3. módulos y controladores
Curso AngularJS - 3. módulos y controladoresCurso AngularJS - 3. módulos y controladores
Curso AngularJS - 3. módulos y controladoresÁlvaro Alonso González
 
Introducciòn a AngularJS
Introducciòn a AngularJSIntroducciòn a AngularJS
Introducciòn a AngularJSRené Olivo
 
Angular js Frontenders Valencia
Angular js Frontenders ValenciaAngular js Frontenders Valencia
Angular js Frontenders ValenciaJavier Ruiz
 
Angular.js
Angular.jsAngular.js
Angular.jsGDG Cali
 
Creación de directivas personalizadas en AngularJS
Creación de directivas personalizadas en AngularJSCreación de directivas personalizadas en AngularJS
Creación de directivas personalizadas en AngularJSAlvaro Yuste Torregrosa
 
Manual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcomManual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcomjo_ram
 
Login social con node.js
Login social con node.jsLogin social con node.js
Login social con node.jsCarlos Azaustre
 

La actualidad más candente (20)

6.angular js
6.angular js6.angular js
6.angular js
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJS
 
Angular js
Angular jsAngular js
Angular js
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJS
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJS
 
Taller de Angular JS: La solución tecnológica perfecta
Taller de Angular JS: La solución tecnológica perfectaTaller de Angular JS: La solución tecnológica perfecta
Taller de Angular JS: La solución tecnológica perfecta
 
Curso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzadosCurso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzados
 
AngularJS
AngularJSAngularJS
AngularJS
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJS
 
Por qué AngularJS
Por qué AngularJSPor qué AngularJS
Por qué AngularJS
 
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
 
Introducción a Angular JS
Introducción a Angular JSIntroducción a Angular JS
Introducción a Angular JS
 
Curso AngularJS - 3. módulos y controladores
Curso AngularJS - 3. módulos y controladoresCurso AngularJS - 3. módulos y controladores
Curso AngularJS - 3. módulos y controladores
 
Introducciòn a AngularJS
Introducciòn a AngularJSIntroducciòn a AngularJS
Introducciòn a AngularJS
 
Angular js Frontenders Valencia
Angular js Frontenders ValenciaAngular js Frontenders Valencia
Angular js Frontenders Valencia
 
Angular.js
Angular.jsAngular.js
Angular.js
 
Creación de directivas personalizadas en AngularJS
Creación de directivas personalizadas en AngularJSCreación de directivas personalizadas en AngularJS
Creación de directivas personalizadas en AngularJS
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJS
 
Manual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcomManual de jquery en pdf desarrollowebcom
Manual de jquery en pdf desarrollowebcom
 
Login social con node.js
Login social con node.jsLogin social con node.js
Login social con node.js
 

Similar a Angular Avanzado: Routing, Directivas y Arquitectura

Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corporacion de Industrias Tecnologicas S.A.
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Eduard Tomàs
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptxSibilinoAndante
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 
Linq to sql 9
Linq to sql 9Linq to sql 9
Linq to sql 9jcfarit
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails IntroThirdWay
 
MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)Senior Dev
 
Calculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCCalculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCIgnacio Aular Reyes
 

Similar a Angular Avanzado: Routing, Directivas y Arquitectura (20)

Javascript + Angular Sesion 5
Javascript + Angular Sesion 5Javascript + Angular Sesion 5
Javascript + Angular Sesion 5
 
Javascript + Angular Sesion 3
Javascript + Angular Sesion 3Javascript + Angular Sesion 3
Javascript + Angular Sesion 3
 
Arquitectura java web
Arquitectura java webArquitectura java web
Arquitectura java web
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
 
Jquery Hmvc
Jquery HmvcJquery Hmvc
Jquery Hmvc
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6Novedades de ASP.NET MVC6
Novedades de ASP.NET MVC6
 
Introducción a Angular 6
Introducción a Angular 6Introducción a Angular 6
Introducción a Angular 6
 
Spring Mvc Final
Spring Mvc FinalSpring Mvc Final
Spring Mvc Final
 
Functional SE.pdf
Functional SE.pdfFunctional SE.pdf
Functional SE.pdf
 
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
5.- PPT 2022 05 U01 T01 Desarrollo de Servicios Web I (1915).pptx
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Linq to sql 9
Linq to sql 9Linq to sql 9
Linq to sql 9
 
Rails intro
Rails introRails intro
Rails intro
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 
MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)MVC & ASP.NET (Spanish)
MVC & ASP.NET (Spanish)
 
ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1ASP.NET MVC Workshop Día 1
ASP.NET MVC Workshop Día 1
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
Calculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCCalculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVC
 

Más de Sergio Castillo Yrizales

Angular of things: angular2 + web bluetooth
Angular of things: angular2 + web bluetoothAngular of things: angular2 + web bluetooth
Angular of things: angular2 + web bluetoothSergio Castillo Yrizales
 
Arquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesArquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesSergio Castillo Yrizales
 

Más de Sergio Castillo Yrizales (19)

Un dia en la vida de un Software Engineer
Un dia en la vida de un Software EngineerUn dia en la vida de un Software Engineer
Un dia en la vida de un Software Engineer
 
Javascript en tiempos de colera
Javascript en tiempos de coleraJavascript en tiempos de colera
Javascript en tiempos de colera
 
Lambda at the edge
Lambda at the edgeLambda at the edge
Lambda at the edge
 
Angular of things: angular2 + web bluetooth
Angular of things: angular2 + web bluetoothAngular of things: angular2 + web bluetooth
Angular of things: angular2 + web bluetooth
 
Pushing html5 beyond boundaries
Pushing html5 beyond boundariesPushing html5 beyond boundaries
Pushing html5 beyond boundaries
 
Javascript en tiempos de colera
Javascript en tiempos de coleraJavascript en tiempos de colera
Javascript en tiempos de colera
 
Web apps con angular y material design
Web apps con angular y material designWeb apps con angular y material design
Web apps con angular y material design
 
Tdd con Angular y jasmine
Tdd con Angular y jasmineTdd con Angular y jasmine
Tdd con Angular y jasmine
 
Ruby 101 session 5
Ruby 101 session 5Ruby 101 session 5
Ruby 101 session 5
 
Ruby 101 session 4
Ruby 101 session 4Ruby 101 session 4
Ruby 101 session 4
 
Javascript + Angular Sesion 6
Javascript + Angular Sesion 6Javascript + Angular Sesion 6
Javascript + Angular Sesion 6
 
Ruby 101 session 3
Ruby 101 session 3Ruby 101 session 3
Ruby 101 session 3
 
Ruby 101 session 2
Ruby 101 session 2Ruby 101 session 2
Ruby 101 session 2
 
Javascript + Angular Sesion 4
Javascript + Angular Sesion 4Javascript + Angular Sesion 4
Javascript + Angular Sesion 4
 
Ruby 101 session 1
Ruby 101 session 1Ruby 101 session 1
Ruby 101 session 1
 
Javascript + Angular Sesion 2
Javascript + Angular Sesion 2Javascript + Angular Sesion 2
Javascript + Angular Sesion 2
 
Javascript + Angular Sesion 1
Javascript + Angular Sesion 1Javascript + Angular Sesion 1
Javascript + Angular Sesion 1
 
Jquery mobile
Jquery mobileJquery mobile
Jquery mobile
 
Arquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móvilesArquitectura de software para aplicaciones móviles
Arquitectura de software para aplicaciones móviles
 

Angular Avanzado: Routing, Directivas y Arquitectura

  • 1. Angular Avanzado Sesion 1 Sergio Castillo Yrizales @scyrizales
  • 2. Agenda  Arquitectura de Angular  Routing  Explicando la Magia 2
  • 4. Ejemplo de Clase  Convertir la barra de menu estatica  Seleccionar y cambiar el color del link seleccionado  Mostrar en la parte inferior el vinculo seleccionado  No usar nada de javascript 4
  • 5. Modulo  Es el punto de partida para la organización de código en Angular  Se indica en la directiva ng-app 5
  • 7. Entendiendo las controladoras  Mediante el $scope se define el viewmodel inicial  Las funciones del scope pueden ser usadas como manejadores de eventos 7
  • 8. Inyeccion de dependencias  Angular gestiona automáticamente que servicio llamar  Sin embargo es mejor hacer lo siguiente: 8
  • 9. $scope  Este servicio sirve para unir la data a la vista  Contexto para las expresiones usadas en la vista  Provee un metodo para “observar” los cambios  Provee un método para recibir cambios desde “afuera”. 9
  • 10. Usando $watch  El método $watch (forma parte del scope) sirve para verificar cambios en alguna propiedad del scope.  La sintaxis es:  $scope.$watch(„propiedad‟, function(value){ });  La funcion suscrita es la forma de realizar los cambios necesarios ante un cambio en la propiedad suscrita  Se puede usar para verificar cambios en propiedades de la controladora padre inclusive. 10
  • 11. La controladora no:  Realiza cambios en el DOM  Formatea el input (form controls)  Filtra el output (filters)  Comparte código con otras 11
  • 12. Entendiendo las vistas  Las vistas sirven para mostrar el viewmodel.  Existen muchas directivas para lograr el comportamiento requerido  Directivas en Angular:  http://docs.angularjs.org/api/ 12
  • 14. Ejemplo de Clase  Construir un carrito de compras:  Categorias  Productos  Cantidades  Checkout 14
  • 15. El botón atrás.  El browser no sabe nada acerca de las vistas  El browser siempre va a regresar a la pagina anterior  Si hubieron varias vistas, lástima. 15
  • 16. Manejando la Historia  El browser tiene que saber que hay interacciones  Tenemos que controlar el evento Hashchanged 16
  • 17. $routeProvider  Sirve para añadir nuevas rutas  Dos métodos  when  otherwhise 17
  • 18. $routeProvider.when Parametro path La ruta que se compara contra $location.path route 18 Descripción Objeto con diversas propiedades que indican varios tipos de configuraciones: •controller: La controladora a usar. •template: String que define el template a usar •templateUrl: ruta fisica de donde cargar un template •redirectTo: manejar redirecciones dentro de angular
  • 19. $routeProvider.otherwise  Define ruta por defecto.  Recibe como parametro un objeto route (explicado en la anterior diapositiva) 19
  • 20. ng-view  Directiva que se usa como contenedor de las vistas a renderizar 20
  • 21. Partial Inline templates  Se puede definir un template dentro del documento con el que trabajamos.  Usamos la etiqueta script junto con el tipo text/ng-template 21
  • 22. Ejemplo: Carrito con Routing  http://jsfiddle.net/scyrizales/sHP48/ 22
  • 24. Explicando el Data Binding  Cada vez que cambia el scope, se actualiza la vista.  Cada vez que un “major event” sucede en la aplicación, y luego de que sucede, se ejecuta una operación “digest” y se actualiza el scope 24
  • 25. Major Events  Entradas de usuario:  Mouse, keyboard, etc.  Eventos de Navegador:  timeout, blur, etc.  Llamadas Ajax:  json, templates, etc… 25
  • 26. $apply, $digest and $$phase  $digest es un metodo interno que realiza la verificación de los cambios entre la vista y el scope y hace las respectivas actualizaciones al scope  $apply sirve para llamar desde fuera al $digest. Cuando usamos otras librerias externas, es necesario llamar a $apply  $$phase es un indicador de si esta corriendo un 26 $digest. Debemos tenerlo en cuenta para no aplicar $apply porque nos dará un error.
  • 27. Llamando a Angular desde fuera  angular.element(domElement).scope()  Sobre este scope, podemos aplicar las funciones $apply y $digest. 27
  • 28. SafeApply  Para evitar los problemas de usar el $apply podemos crear esta función en el rootScope 28
  • 29. Contruyamos un blog  Listado de entradas  Agregar nuevos posts (eliminarlos y modificarlos) 29
  • 31. ¿Qué es una Directiva?  Las directivas es lo que hace diferente a AngularJS  Permiten encapsular funcionalidad en puro html. 31
  • 32. Razones para escribir directivas  Necesidades especiales  Imaginen poder usar este código para compartir un mismo formulario en cualquier parte de su aplicación 32
  • 33. Razones para escribir directivas  Encapsular un plugin de otra libreria  La directiva no existe  Las directivas que existen no cumplen con las necesidades. 33
  • 35. Valores de las propiedades Propiedad restrict Puede ser A,E,C y M que significan attribute, element, class, o comment scope Cada subpropiedad puede tener cualquiera de estos 3 valores: •@: el valor es de un solo sentido •=: el valor es de dos sentidos •&: guarda una referencia a una función o expresión template La base para escribir el código que usará la directiva replace Boolean que indica si se debe reemplazar el html original por el html generado por el template transclude Indica si se debe preservar el contenido de la declaración de la directiva en el html original, se usa en conjunto con ng-transclude controller 35 Valor La controladora que se usara para darle ambito al template, no siempre es necesario
  • 36. Valores de las propiedades Propiedad requires Indica si una directiva depende de otra link 36 Valor Función que realiza la configuración inicial de la directiva. Recibe cuatro parametros: function link(scope, iElement, iAttrs, controller) •scope: indica el objeto creado por la propiedad scope. •iElement: se refiere al objeto base de la controladora. Este vienen encapsulado en jqLite o Jquery (si es que se incluyo en el proyecto) •iAttrs: los atributos que se asignaron al html original de la directiva declarada •Controller: el controller de la directiva padre. Solo cuando se ha establecido la propiedad requires
  • 37. Jerarquía de scopes  Al usar directivas, se crean nuevos scopes, o se heredan los scopes padres.  Si al definir la directiva, no se usa la propiedad scope, la directiva crea un nuevo scope que hereda todas las propiedades del scope de la controladora que contiene a la directiva.  Al momento de usar la propiedad scope, se pierde toda conexión con el scope padre, y se genera un scope independiente para la directiva. 37
  • 38. Usando $watch  El método $watch (forma parte del scope) sirve para verificar cambios en alguna propiedad del scope.  La sintaxis es:  $scope.$watch(„propiedad‟, function(value){ });  La funcion suscrita es la forma de realizar los cambios necesarios ante un cambio en la propiedad suscrita  Se puede usar para verificar cambios en propiedades de la controladora padre inclusive. 38
  • 39. Ejemplos (Directiva Simple)  Hagamos una calculadora  http://jsfiddle.net/scyrizales/mUJhL/ 39
  • 40. Ejemplos (Directiva Simple)  Hagamos un time formatter  http://jsfiddle.net/scyrizales/rUbsE/ 40
  • 41. Ejemplos (Directiva Anidada)  Hagamos un tab panel  http://jsfiddle.net/scyrizales/6C6Mv/ 41