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
PDF
De HTML a Express
PDF
Semana 4 Estructura y componentes SPA
KEY
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
PPTX
Introducción a AngularJS
ODP
Desarrollando aplicaciones web usando Catalyst y jQuery
PDF
Introducción al desarrollo Web: Frontend con Angular 6
PDF
Gwt III - Avanzado
ODP
Desarrollo de aplicaciones web usando Catalyst y jQuery
PDF
J M E R L I N P H P
PDF
Jquery para principianes
PDF
angular cheat sheet for start and angu;a
PDF
Taller de optimización avanzada WPO – Carga condicional de plugins - WordCamp...
PDF
(Muy breve) Introduccion a jQuery
PPTX
06. jsf (java server faces) (1)
ODP
Desarrollo de aplicaciones web usando Catalyst y jQuery
PDF
Symfony parte 15 Consultas y Migración
PPTX
Reactividad en Angular, React y VueJS
PPTX
Tema servlets
Introducción a AngularJS
De HTML a Express
Semana 4 Estructura y componentes SPA
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Introducción a AngularJS
Desarrollando aplicaciones web usando Catalyst y jQuery
Introducción al desarrollo Web: Frontend con Angular 6
Gwt III - Avanzado
Desarrollo de aplicaciones web usando Catalyst y jQuery
J M E R L I N P H P
Jquery para principianes
angular cheat sheet for start and angu;a
Taller de optimización avanzada WPO – Carga condicional de plugins - WordCamp...
(Muy breve) Introduccion a jQuery
06. jsf (java server faces) (1)
Desarrollo de aplicaciones web usando Catalyst y jQuery
Symfony parte 15 Consultas y Migración
Reactividad en Angular, React y VueJS
Tema servlets

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)

DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PPTX
Curso de generación de energía mediante sistemas solares
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
MANUAL de recursos humanos para ODOO.pdf
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
Diapositiva proyecto de vida, materia catedra
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Zarate Quispe Alex aldayir aplicaciones de internet .docx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Propuesta BKP servidores con Acronis1.pptx
Presentacion de Alba Curso Auditores Internos ISO 19011
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Guía 5. Test de orientación Vocacional 2.docx
Curso de generación de energía mediante sistemas solares
TRABAJO DE TECNOLOGIA.pdf...........................
Historia Inteligencia Artificial Ana Romero.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
MANUAL de recursos humanos para ODOO.pdf
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
CyberOps Associate - Cisco Networking Academy
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Diapositiva proyecto de vida, materia catedra
El-Gobierno-Electrónico-En-El-Estado-Bolivia
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...

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