¡Esta es una revisión vieja del documento!


2.8 Modulos

Por ahora hemos visto unas cuantas directivas de angular 1), pasemos a explicar que son los módulos en AngularJS.

En todos los ejemplo que hemos visto ya hemos hecho uso de los módulos en AngularJS con la siguiente línea:

var app=angular.module("app",[]);

Pero, ¿que es un módulo? Podríamos verlo como un paquete de Java. Es como una forma de agrupar funcionalidades de Angular. Por ejemplo podríamos crear varias directivas relacionadas con google Maps. Lo normal sería agrupar todas esas directivas en un único módulo y luego al crear nuestra aplicación decir que vamos a usar dicho módulo.

Sigamos viendo lo que es un módulo mediante los métodos de JavaScript que ofrece AngularJS.

Crear un módulo

Podemos crear un módulo llamado “AA” mediante la siguiente línea:

angular.module("AA",[]);

Al ejecutarlo se crea el módulo “AA”, aunque no contiene ninguna funcionalidad, será necesario añadirla posteriormente

¿Porque debemos incluir los corchetes? Desgraciadamente no existe un método para obtener una referencia a un módulo y otro distinto para crear . En ambos casos se usa el método module. Si incluimos un segundo parámetro con los corchetes, estamos indicando que se está creando , pero si no incluimos el segundo parámetro lo que hacemos es pedir un módulo que ya existe.

Recuerda poner los corchetes al crear un módulo:
angular.module("AA",[]);

Obtener un módulo

Para obtener una referencia a un módulo ya creado usaremos la siguiente línea:

var moduloAA=angular.module("AA");

Ahora en la variable de JavaScript moduloAA tenemos una referencia al módulo llamado AA, el cual existía previamente

Crear y obtener un módulo

Lo normal no es crear un módulo y luego obtener una referencia a él sino que hacerlo todo en la misma línea:

var moduloAA=angular.module("AA",[]);

Ahora en la variable de JavaScript moduloAA tenemos una referencia al módulo llamado AA, el cual acabamos de crear.

¿Se entiende ahora la primera línea de todos los ejemplos de AngularJS?

Controladores

Por ahora hemos visto que crear un controlador es simplemente crear una función JavaScript con el nombre de dicho controlador. Esta no es una forma adecuada de crear un controlador, lo correcto es añadir el controlador al módulo de nuestra aplicación.

var app=angular.module("app",[]);

app.controller("PruebaController",function($scope) {
  $scope.mensaje="Hola Mundo";
});

  • Línea 1: La variable app contiene una referencia al módulo que acabamos de crear llamado app. Esta variable app contiene ,entre otros, un método llamado controller que nos permite añadir controladores a nuestro módulo.
  • Línea 3: Creamos un controlador llamado “PruebaController”, el cual añadimos al módulo app.

El método controller acepta dos parámetros, el primero nombre del controlador y el segundo la función 2) con el código JavaScript del controlador.

Todos los controladores que usemos en nuestra aplicación deben siempre definirse dentro de un módulo y no como funciones sueltas. Esto es importante ya que a partir de la versión 1.3 de AngularJS no funcionaran los controladores que no estén dentro de un módulo

Directivas

Hemos visto algunas directivas en AngularJS pero nosotros podemos crear nuestras propias directivas, para ello deberemos usar el método directive del módulo.

app.directive('mapa', function() {
  
});

Ya veremos mas adelante como crear nuevas directivas pero por ahora simplemente recordar que al igual que los controladores, las directivas deben añadirse a un módulo.

Otros artefactos

Hasta ahora hemos visto que AngularJS dispone de 2 artefactos 3):

  • Controladores
  • Directivas

AngularJs dispone de otros tipos de artefactos que iremos viendo a lo largo del curso y que también deben añadirse a los módulos:

  • Filtros
  • Constantes
  • Servicios
  • Factorias
  • Providers
  • Config
  • Run
  • Etc.

Es decir y para acabar con la explicación de que es un módulo:

Un módulo es donde se añaden los distintos artefactos que usaremos en nuestra aplicación.

Dependencias

En cualquier aplicación que desarrollemos acabaremos organizando nuestro código en distintos módulos o usando módulos de terceros.

¿como indicamos que AngularJS debe cargar el código de los otros módulos? Es decri, ¿como le decimos que nuestro módulo depende de otros módulos? Por fin vamos a explicar el significado de los corchetes al crear un módulo. Si sabes algo de JavaScript ya habrás deducido que los 2 corchetes corresponden a un array vacio. Pero, ¿que significado tiene dicho array? Pues son la lista de nombre de módulos de los que dependemos.

Veamos un ejemplo:

var moduloA=angular.module("A",[]);
var moduloB=angular.module("B",[]);

var app=angular.module("app",["A","B"]);

  • Línea 1: Se crea el módulo “A”
  • Línea 2: Se crea el módulo “B”
  • Línea 4: Se crea el módulo “app” pero indicamos que depende de los módulos “A” y “B”.

¿que implicaciones tiene que el módulo “app” dependa de los módulos “A” y “B”?

AngularJS por defecto solo nos permite usar los artefactos que hemos definido en nuestro módulo principal es decir en el que hemos indicado en la directiva ng-app en el tag <html> que en nuestros ejemplos es el módulo app. El resto de módulo aunque los creemos no se podrán utilizar ya que no dependen del módulo principal. Por ello la dependencia de módulos permite que podamos usar los artefactos de otros módulos.

Transitividad

La carga de módulos es transitiva , veamos un ejemplo:

var moduloT=angular.module("T",[]);

var moduloA=angular.module("A",["T"]);
var moduloB=angular.module("B",[]);

var app=angular.module("app",["A","B"]);

  • Línea 1: Ahora creamos un nuevo módulo llamado “T”
  • Línea 3: El módulo “A” ahora depende del módulo “T”

Ahora el módulo “app” depende de los módulos “A” y “B” pero el módulo “A” a su vez depende del módulo “T”. ¿Que implica ésto? Que en nuestra aplicación podremos usar cualquier artefacto definido en los módulos “app”, “A”, “B” y “T”.

Carga de módulos

Llegados a este punto , parece que los módulos son una cosa muy útil para organizar nuestro código JavaScript y con las relaciones transitivas nos podemos ahorrar mucho trabajo.

Pero hay un asunto en el que no habrás caído , para que funciones todo ésto, todo el código JavaScript debe estar cargado en la página. ¿Como? Si, te estoy diciendo que aun debes seguir añadiendo manualmente todos tus ficheros “js” con todo el código JavaScript.

AngularJS no va a ahorrarte cosas como lo siguiente:

<script type='text/javascript' src='/js/modules/T.js'></script>
<script type='text/javascript' src='/js/modules/A.js'></script>
<script type='text/javascript' src='/js/modules/B.js'></script>
<script type='text/javascript' src='/js/modules/app.js'></script>

Es decir , suponiendo que cada módulo y todos sus artefactos están en un único fichero , deberemos cargar los 4 ficheros explicitamente en el index.html. :-(

Entonces , ¿Para que sirven los módulos? Mucho se ha discutido sobre ello , y daremos las siguientes ayudas:

Si están haciendo una librería JavaScript con artefactos de Angular , como por ejemplo directivas para usar Google Maps en AngularJS debes de añadirlas a un módulo y como no puedes saber el nombre del módulo de la aplicación principal deberás crearte tu propio módulo.

Este es el primer motivo para crear nuevos módulos.

Referencias

1) pero aun quedan muchas por ver
2) Ya veremos posteriormente como la forma correcta sería pasar un array
3) He usado esa palabra aunque no exista en la documentación de AngularJS
unidades/02_angular/08_modulos.1406133719.txt.gz · Última modificación: 2014/07/23 18:41 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0