SlideShare una empresa de Scribd logo
AngularJS
Temas avanzados
Álvaro Alonso
Inicialización manual
 Angular se inicializa automáticamente cuando el DOM está cargado
completamente
 En ese momento busca la directiva ngApp y si la encuentra
 Carga el módulo indicado por la directiva
 Crea el inyector para la aplicación
 Compila el DOM
 Pero también se puede inicializar Angular de forma manual
 Mediante angular.bootstrap(…)
2
Inicialización manual
3
<!doctype html>
<html>
<body>
<div ng-controller="MyController">
Hello {{greetMe}}!
</div>
<script src="http://code.angularjs.org/snapshot/angular.js"></script>
<script>
angular.module('myApp', [])
.controller('MyController', ['$scope', function ($scope) {
$scope.greetMe = 'World';
}]);
angular.element(document).ready(function() {
angular.bootstrap(document, ['myApp']);
});
</script>
</body>
</html>
Dependency Injection
 Inline Array Annotation (recomendada)
 $inject Property Annotation
 Implicit Annotation (no funciona con código minificado!!!)
Formas alternativas
4
someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {
// ...
}]);
var MyController = function($scope, greeter) {
// ...
}
MyController.$inject = ['$scope', 'greeter'];
someModule.controller('MyController', MyController);
someModule.controller('MyController', function($scope, greeter) {
// ...
});
Dependency Injection
 Con inicialización automática
 Con inicialización manual
Evitar Implicit Annotation
5
<!doctype html>
<html ng-app="myApp" ng-strict-di>
<body>
I can add: {{ 1 + 2 }}.
<script src="angular.js"></script>
</body>
</html>
angular.bootstrap(document, ['myApp'], {
strictDi: true
});
Jerarquía de $scope
 Cada aplicación de angular tiene
 Un único $rootScope
 Varios $scope hijos
 Cuando se crea un nuevo scope éste se añade como hijo de su scope padre
 Así crea un árbol de scopes
 Cuando Angular evalúa una expresión
 primero mira en el scope asociado al elemento
 Si no lo encuentra va mirando en los scopes padres
 El último es el $rootScope
 https://docs.angularjs.org/guide/scope#scope-hierarchies
6
Herencia en controladores
 Si apilamos controladores en el HTML
 Cada directiva ng-controller crea un $scope hijo
 Por lo que se crea una jerarquía de scopes
 En la que cada uno hereda propiedades y métodos de los controllers que
se encuentran más “arriba”
7
<div class="spicy">
<div ng-controller="MainController">
<p>Good {{timeOfDay}}, {{name}}!</p>
<div ng-controller="ChildController">
<p>Good {{timeOfDay}}, {{name}}!</p>
<div ng-controller="GrandChildController">
<p>Good {{timeOfDay}}, {{name}}!</p>
</div>
</div>
</div>
</div>
Ciclo de vida del $scope
 Creación
 Del scope raíz y de los hijos
 Registro de watchers
 Por parte de las directivas
 Mutado del modelo
 Como resultado del two-way data binding
 Observación del mutado
 Propagación por los scopes hijos y observación de posibles cambios
 Destrucción
 Cuando ya no es necesario
8
Directivas personalizadas
 Además de las directivas incluidas en el núcleo de Angular
 Pueden crearse directivas personalizadas
 Hay diferentes tipos
 Directivas que extienden un template
 Directivas que manipulan el DOM
 Directivas que recubren otros elementos
 Directivas que añaden Event Listeners
 Directivas que se comunican entre sí
 Se crean con la función de módulo module.directive
9
Directivas personalizadas
10
angular.module('docsSimpleDirective', [])
.controller('Controller', ['$scope', function($scope) {
$scope.customer = {
name: 'Naomi',
address: '1600 Amphitheatre'
};
}])
.directive('myCustomer', function() {
return {
template: 'Name: {{customer.name}} Address: {{customer.address}}'
};
});
<div ng-controller="Controller">
<div my-customer></div>
</div>
Filtros personalizados
 Además de los filtros incluidos en Angular por defecto
 Pueden definirse filtros personalizados
 Mediante la función module.filter
 Esta función debe ser una función “pura”
 Siempre debe devolver le mismo resultado dados los mismos argumentos
 No debe afectar al estado externo de otros servicios
11
Filtros personalizados
12
angular.module('myReverseFilterApp', [])
.filter('reverse', function() {
return function(input, uppercase) {
input = input || '';
var out = '';
for (var i = 0; i < input.length; i++) {
out = input.charAt(i) + out;
}
// conditional based on optional argument
if (uppercase) {
out = out.toUpperCase();
}
return out;
};
})
.controller('MyController', ['$scope', 'reverseFilter', function($scope, reverseFilter) {
$scope.greeting = 'hello';
$scope.filteredGreeting = reverseFilter($scope.greeting);
}]);
Filtros personalizados
13
angular.module('myReverseFilterApp', [])
.filter('reverse', function() {
return function(input, uppercase) {
for (var i = 0; i < input.length; i++) {
out = input.charAt(i) + out;
}
if (uppercase) { // conditional based on optional argument
out = out.toUpperCase();
}
return out;
};
})
.controller('MyController', ['$scope’, function($scope) {
$scope.greeting = 'hello’;
}]);
<div ng-controller="MyController">
<input ng-model="greeting" type="text"><br>
Reverse: {{ greeting | reverse }}<br>
Reverse + uppercase: {{ greeting | reverse:true }}<br>
</div>
Validación de formularios personalizada
 Se hace definiendo nuevas directivas
14
var INTEGER_REGEXP = /^-?d+$/;
app.directive('integer', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ctrl) {
ctrl.$validators.integer = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
return true; // consider empty models to be valid
}
if (INTEGER_REGEXP.test(viewValue)) {
return true; // it is valid
}
return false; // it is invalid
};
}
};
});
Validación de formularios personalizada
15
<input type="number" ng-model="size" name="size” min="0" max="10" integer />
<span ng-show="form.size.$error.integer">The value is not a valid integer!</span>
Documentación
 Inicialización manual
 https://docs.angularjs.org/guide/bootstrap
 Herencia de controladores
 https://github.com/angular/angular.js/wiki/Understanding-Scopes
 Validación personalizada
 https://docs.angularjs.org/guide/forms#custom-validation
16
AngularJS
Temas avanzados
Álvaro Alonso

Más contenido relacionado

PPTX
Curso AngularJS - 3. módulos y controladores
PPTX
Curso AngularJS - 5. rutas
PPTX
Curso AngularJS - 4. filtros y servicios
PPTX
Curso AngularJS - 2. conceptos básicos
PPTX
Angular Conceptos Practicos 1
PPTX
Advanced angular 1
PPT
Angularjs Lógica de negocio
PPTX
Curso AngularJS - 3. módulos y controladores
Curso AngularJS - 5. rutas
Curso AngularJS - 4. filtros y servicios
Curso AngularJS - 2. conceptos básicos
Angular Conceptos Practicos 1
Advanced angular 1
Angularjs Lógica de negocio

La actualidad más candente (20)

PPTX
Curso AngularJS - 1. introducción
PPTX
Curso AngularJS - 6. formularios
PDF
Api De Google Calendar
PDF
Directivas en AngularJS
PDF
Javascript y AJAX en Wordpress
KEY
Introducción a Flask
PDF
ASP.NET MVC - Introducción a ASP.NET MVC
PDF
Java Web Lección 02 - JSP
PDF
ASP.NET MVC - introduccion al web api
PDF
ASP.NET MVC - validacion de datos
KEY
Introducción a DJango
PDF
ASP.NET MVC - AJAX
PDF
Curso de Struts2: Unidad Didáctica 00 Introduccion
ODP
Presentacion
PDF
ASP.NET MVC - areas, manejo de estado
PDF
cream code with objective-c
PPTX
ASP.Net MVC 3 - Eugenio Serrano
PDF
Aplicación abc. asp net mvc 3
PPTX
Curso AngularJS - 1. introducción
Curso AngularJS - 6. formularios
Api De Google Calendar
Directivas en AngularJS
Javascript y AJAX en Wordpress
Introducción a Flask
ASP.NET MVC - Introducción a ASP.NET MVC
Java Web Lección 02 - JSP
ASP.NET MVC - introduccion al web api
ASP.NET MVC - validacion de datos
Introducción a DJango
ASP.NET MVC - AJAX
Curso de Struts2: Unidad Didáctica 00 Introduccion
Presentacion
ASP.NET MVC - areas, manejo de estado
cream code with objective-c
ASP.Net MVC 3 - Eugenio Serrano
Aplicación abc. asp net mvc 3
Publicidad

Destacado (20)

PDF
Tutorial AngularJS - episódio 5 - diretivas
PPTX
Forms in AngularJS
PPTX
Directivas en angular js
PDF
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
PPT
Iniciando com jQuery
PPTX
Introdução ao AngularJS!
PPTX
JavaScript - Date
PDF
O Poderoso AngularJS
PPTX
AngularJS - 10 passos para aprender a criar suas directivas
PPTX
Aplicando filtros com AngularJS
PDF
Angular js
PPTX
Criando Filtros com AngularJS
PPTX
Scope AngularJS
PPTX
Automação de Testes com AngularJS
PDF
HTTP Interceptors com AngularJS
PDF
AngularJS Abraçando o MVC Client-Side
PPTX
JavaScript - Expressões Regulares
PPTX
Angular js tutorial slides
PPTX
Criando aplicações Single-Page com AngularJS
PPTX
Utilizando diretivas com AngularJS
Tutorial AngularJS - episódio 5 - diretivas
Forms in AngularJS
Directivas en angular js
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Iniciando com jQuery
Introdução ao AngularJS!
JavaScript - Date
O Poderoso AngularJS
AngularJS - 10 passos para aprender a criar suas directivas
Aplicando filtros com AngularJS
Angular js
Criando Filtros com AngularJS
Scope AngularJS
Automação de Testes com AngularJS
HTTP Interceptors com AngularJS
AngularJS Abraçando o MVC Client-Side
JavaScript - Expressões Regulares
Angular js tutorial slides
Criando aplicações Single-Page com AngularJS
Utilizando diretivas com AngularJS
Publicidad

Similar a Curso AngularJS - 7. temas avanzados (20)

PDF
Introducción a AngularJS
PPTX
Javascript + Angular Sesion 5
PPTX
Advanced angular 2
PPTX
Angular Conceptos Practicos 2
PPTX
Introduccion a AngularJS
PDF
Curso Básico de AngularJS
PDF
Creación de directivas personalizadas en AngularJS
ODP
AngularJS Patterns: Clean Code
PDF
Despegar Tech Talk - AngularJS
PPTX
Introducción a AngularJS
PPTX
AngularJS DEVFEST
PPTX
AngularJS DEVFEST
PPTX
AngularJS
PPTX
PDF
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
PPTX
Introducción a AngularJS
PDF
Angular js
PPTX
Javascript + Angular Sesion 3
PDF
Por qué AngularJS
Introducción a AngularJS
Javascript + Angular Sesion 5
Advanced angular 2
Angular Conceptos Practicos 2
Introduccion a AngularJS
Curso Básico de AngularJS
Creación de directivas personalizadas en AngularJS
AngularJS Patterns: Clean Code
Despegar Tech Talk - AngularJS
Introducción a AngularJS
AngularJS DEVFEST
AngularJS DEVFEST
AngularJS
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
Introducción a AngularJS
Angular js
Javascript + Angular Sesion 3
Por qué AngularJS

Más de Álvaro Alonso González (16)

PPTX
Adding identity management and access control to your app
PPTX
KeyRock and Wilma - Openstack-based Identity Management in FIWARE
PPTX
Lesson 6 - How to register your sensors in account portal
PPTX
Lesson 5 - Installing Keyrock in your own infrastructure
PPTX
Keyrock - Lesson 3. Applications. How to create OAuth2 tokens.
PPTX
Keyrock - Lesson 1. Introduction
PPTX
Cloud Portal - Lesson 5. Advanced tasks
PPTX
Cloud Portal - Lesson 4. Managing Storage
PPTX
Cloud Portal - Lesson 2. Cloud Portal Overview
PPTX
Cloud Portal - Lesson 1. Introduction
PPTX
Cloud Portal - Lesson 3. Launching an Instance
PPTX
Primeros pasos con Docker
PDF
Introducción al Protocolo OAuth 2.0
PPTX
Adding Identity Management and Access Control to your Application
PPTX
Adding Identity Management and Access Control to your Application - Exersices
PPTX
Setting Up your Cloud Environment using the FIWARE Lab Cloud Portal
Adding identity management and access control to your app
KeyRock and Wilma - Openstack-based Identity Management in FIWARE
Lesson 6 - How to register your sensors in account portal
Lesson 5 - Installing Keyrock in your own infrastructure
Keyrock - Lesson 3. Applications. How to create OAuth2 tokens.
Keyrock - Lesson 1. Introduction
Cloud Portal - Lesson 5. Advanced tasks
Cloud Portal - Lesson 4. Managing Storage
Cloud Portal - Lesson 2. Cloud Portal Overview
Cloud Portal - Lesson 1. Introduction
Cloud Portal - Lesson 3. Launching an Instance
Primeros pasos con Docker
Introducción al Protocolo OAuth 2.0
Adding Identity Management and Access Control to your Application
Adding Identity Management and Access Control to your Application - Exersices
Setting Up your Cloud Environment using the FIWARE Lab Cloud Portal

Último (20)

PDF
Aristoteles-y-su-forma-de-entender-el-conocimiento-y-las-personas.pdf
PDF
taller de informática - LEY DE OHM
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
Introduccion a servidores de Aplicaciones (1).pptx
DOCX
Las nuevas tecnologías en la salud - enfermería técnica.
DOCX
Trabajo colaborativo Grupo #2.docxmmuhhlk
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
Conceptos básicos de programación tecnología.pdf
PDF
Estrategia de apoyo tecnología grado 9-3
DOCX
Trabajo colaborativo Grupo #2.docxmkkkkkkl
PPTX
Presentación de Redes de Datos modelo osi
PDF
Maste clas de estructura metálica y arquitectura
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Calidad desde el Docente y la mejora continua .pdf
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Influencia-del-uso-de-redes-sociales.pdf
Aristoteles-y-su-forma-de-entender-el-conocimiento-y-las-personas.pdf
taller de informática - LEY DE OHM
historia_web de la creacion de un navegador_presentacion.pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
Introduccion a servidores de Aplicaciones (1).pptx
Las nuevas tecnologías en la salud - enfermería técnica.
Trabajo colaborativo Grupo #2.docxmmuhhlk
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
Conceptos básicos de programación tecnología.pdf
Estrategia de apoyo tecnología grado 9-3
Trabajo colaborativo Grupo #2.docxmkkkkkkl
Presentación de Redes de Datos modelo osi
Maste clas de estructura metálica y arquitectura
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Calidad desde el Docente y la mejora continua .pdf
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Influencia-del-uso-de-redes-sociales.pdf

Curso AngularJS - 7. temas avanzados

  • 2. Inicialización manual  Angular se inicializa automáticamente cuando el DOM está cargado completamente  En ese momento busca la directiva ngApp y si la encuentra  Carga el módulo indicado por la directiva  Crea el inyector para la aplicación  Compila el DOM  Pero también se puede inicializar Angular de forma manual  Mediante angular.bootstrap(…) 2
  • 3. Inicialización manual 3 <!doctype html> <html> <body> <div ng-controller="MyController"> Hello {{greetMe}}! </div> <script src="http://code.angularjs.org/snapshot/angular.js"></script> <script> angular.module('myApp', []) .controller('MyController', ['$scope', function ($scope) { $scope.greetMe = 'World'; }]); angular.element(document).ready(function() { angular.bootstrap(document, ['myApp']); }); </script> </body> </html>
  • 4. Dependency Injection  Inline Array Annotation (recomendada)  $inject Property Annotation  Implicit Annotation (no funciona con código minificado!!!) Formas alternativas 4 someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { // ... }]); var MyController = function($scope, greeter) { // ... } MyController.$inject = ['$scope', 'greeter']; someModule.controller('MyController', MyController); someModule.controller('MyController', function($scope, greeter) { // ... });
  • 5. Dependency Injection  Con inicialización automática  Con inicialización manual Evitar Implicit Annotation 5 <!doctype html> <html ng-app="myApp" ng-strict-di> <body> I can add: {{ 1 + 2 }}. <script src="angular.js"></script> </body> </html> angular.bootstrap(document, ['myApp'], { strictDi: true });
  • 6. Jerarquía de $scope  Cada aplicación de angular tiene  Un único $rootScope  Varios $scope hijos  Cuando se crea un nuevo scope éste se añade como hijo de su scope padre  Así crea un árbol de scopes  Cuando Angular evalúa una expresión  primero mira en el scope asociado al elemento  Si no lo encuentra va mirando en los scopes padres  El último es el $rootScope  https://docs.angularjs.org/guide/scope#scope-hierarchies 6
  • 7. Herencia en controladores  Si apilamos controladores en el HTML  Cada directiva ng-controller crea un $scope hijo  Por lo que se crea una jerarquía de scopes  En la que cada uno hereda propiedades y métodos de los controllers que se encuentran más “arriba” 7 <div class="spicy"> <div ng-controller="MainController"> <p>Good {{timeOfDay}}, {{name}}!</p> <div ng-controller="ChildController"> <p>Good {{timeOfDay}}, {{name}}!</p> <div ng-controller="GrandChildController"> <p>Good {{timeOfDay}}, {{name}}!</p> </div> </div> </div> </div>
  • 8. Ciclo de vida del $scope  Creación  Del scope raíz y de los hijos  Registro de watchers  Por parte de las directivas  Mutado del modelo  Como resultado del two-way data binding  Observación del mutado  Propagación por los scopes hijos y observación de posibles cambios  Destrucción  Cuando ya no es necesario 8
  • 9. Directivas personalizadas  Además de las directivas incluidas en el núcleo de Angular  Pueden crearse directivas personalizadas  Hay diferentes tipos  Directivas que extienden un template  Directivas que manipulan el DOM  Directivas que recubren otros elementos  Directivas que añaden Event Listeners  Directivas que se comunican entre sí  Se crean con la función de módulo module.directive 9
  • 10. Directivas personalizadas 10 angular.module('docsSimpleDirective', []) .controller('Controller', ['$scope', function($scope) { $scope.customer = { name: 'Naomi', address: '1600 Amphitheatre' }; }]) .directive('myCustomer', function() { return { template: 'Name: {{customer.name}} Address: {{customer.address}}' }; }); <div ng-controller="Controller"> <div my-customer></div> </div>
  • 11. Filtros personalizados  Además de los filtros incluidos en Angular por defecto  Pueden definirse filtros personalizados  Mediante la función module.filter  Esta función debe ser una función “pura”  Siempre debe devolver le mismo resultado dados los mismos argumentos  No debe afectar al estado externo de otros servicios 11
  • 12. Filtros personalizados 12 angular.module('myReverseFilterApp', []) .filter('reverse', function() { return function(input, uppercase) { input = input || ''; var out = ''; for (var i = 0; i < input.length; i++) { out = input.charAt(i) + out; } // conditional based on optional argument if (uppercase) { out = out.toUpperCase(); } return out; }; }) .controller('MyController', ['$scope', 'reverseFilter', function($scope, reverseFilter) { $scope.greeting = 'hello'; $scope.filteredGreeting = reverseFilter($scope.greeting); }]);
  • 13. Filtros personalizados 13 angular.module('myReverseFilterApp', []) .filter('reverse', function() { return function(input, uppercase) { for (var i = 0; i < input.length; i++) { out = input.charAt(i) + out; } if (uppercase) { // conditional based on optional argument out = out.toUpperCase(); } return out; }; }) .controller('MyController', ['$scope’, function($scope) { $scope.greeting = 'hello’; }]); <div ng-controller="MyController"> <input ng-model="greeting" type="text"><br> Reverse: {{ greeting | reverse }}<br> Reverse + uppercase: {{ greeting | reverse:true }}<br> </div>
  • 14. Validación de formularios personalizada  Se hace definiendo nuevas directivas 14 var INTEGER_REGEXP = /^-?d+$/; app.directive('integer', function() { return { require: 'ngModel', link: function(scope, elm, attrs, ctrl) { ctrl.$validators.integer = function(modelValue, viewValue) { if (ctrl.$isEmpty(modelValue)) { return true; // consider empty models to be valid } if (INTEGER_REGEXP.test(viewValue)) { return true; // it is valid } return false; // it is invalid }; } }; });
  • 15. Validación de formularios personalizada 15 <input type="number" ng-model="size" name="size” min="0" max="10" integer /> <span ng-show="form.size.$error.integer">The value is not a valid integer!</span>
  • 16. Documentación  Inicialización manual  https://docs.angularjs.org/guide/bootstrap  Herencia de controladores  https://github.com/angular/angular.js/wiki/Understanding-Scopes  Validación personalizada  https://docs.angularjs.org/guide/forms#custom-validation 16