Tabla de Contenidos

9.1 Introducción

Hasta ahora hemos usado las directivas de AngularJS , en esta unidad vamos a ver como crear nuestra propias directivas.

¿Cual es la utilidad de crear nuestras propias directivas? Pues es simplemente es poder crearte tus propias etiquetas HTML y poder hace cosas como:

<input ng-model="fechaNacimiento" ca-fecha>

<ca-tabs>
  <ca-tab nombre="Compras">
    Contenido de la segunda pesaña
  </ca-tab>
  <ca-tab nombre="Ventas">
    Contenido de la segunda pesaña
  </ca-tab>      
</ca-tabs>

<ca-paginacion numero-paginas="10"></ca-paginacion>

Etc. , etc.

Características

Pasemos ahora a ver alguna característica de las directivas

Formas

Lo primero que hemos notado es que hemos usado una directiva como un atributo, como en ca-fecha pero también se puede hace como si fuera directamente un nuevo tag HTML , como en ca-paginacion.

AngularJS permite ambas formas e incluso como clases CSS y como comentarios 1), pero es tan raro que mejor ni hablar de ellas. Así que a efectos prácticos una directiva se puede usar como:

<input ng-model="fechaNacimiento" ca-fecha>

<ca-paginacion numero-paginas="10"></ca-paginacion>

Prefijos en Directivas

El equipo de Angular recomienda que las directivas tengan siempre un prefijo de forma que no choquen con otras directivas creadas por otros desarrolladores o con actuales o futuras etiquetas de HTML. Por eso las directivas de AngularJS empiezan siempre por “ng”. En las directivas que creemos en este curso siempre empezaran por “ca” por “Curso de Angular”.

Ejemplos:

Nombre

Hasta ahora hemos visto los nombres de las directivas con guiones para separar palabras.

Ej:

El nombre verdadero de las directivas cuando se definen realmente es el siguiente

Ej:

Es decir el nombre de las directivas sigue el formato de los identificadores en JavaScript. Ese es el nombre que se usa en la documentación de AngularJS cuando se refieren a una directiva y el que usemos cuando creemos una nueva directiva.

Variaciones del nombre en HTML

Dado el nombre de la directiva tal y como se ve en JavaScript se puede usar en la página HTML siguiendo las siguientes reglas:

Por lo tanto la directiva ngView puede usarse en una página HTML con las siguientes formas:

Aunque lo normal es restringirse solo a las siguientes formas.

Creando una directiva

Para crear una directiva debemos definirla dentro de un módulo al igual que hacíamos para los controladores, filtros, etc.

El método a usar del módulo es directive(nombre,funcionFactory) siendo:

El objeto con la definición de la directiva es el verdadero objeto que contiene toda la información de nuestra directiva y comprender todas sus propiedades implicaría saber todo sobre las directivas así que en esta unidad solo vamos a ver unas cuantas propiedades del objeto con la definición de la directiva.

En esta unidad solo vamos a ver las siguientes propiedades:

PlantUML Graph

En este tema solo vamos a ver las siguientes propiedades:

En los 2 temas siguientes veremos las propiedades link y scope.

Ejemplo

Vamos a hacer nuestra primera directiva llamada “acTitulo” que simplemente muestre el texto “Hola Mundo” como título <h1>.

app.directive("acTitulo",[function() {
  
  var directiveDefinitionObject ={
    restrict:"E",
    replace : true,
    template:"<h1>Hola Mundo</h1>"
  }
  
  return directiveDefinitionObject;
}]);

Usaremos la directiva de la siguiente forma:

<ac-titulo></ac-titulo>

Y la directiva generará el siguiente HTML

<h1>Hola Mundo</h1>

Si el valor de replace hubiera sido false se hubiera generado el siguiente HTML:

<ac-titulo>
    <h1>Hola Mundo</h1>
</ac-titulo>

Por último destacar que el template solo puede tener un tag raiz , si queremos que la directiva tenga varios tags hernamos deberemos ponerlos todos dentro de un nuevo tag

Ejemplo

Referencias

1) En Angular 1.2 ya no se permite