AngularJS: Directivas

Las directivas son “comandos” que se incorporan al HTML y que, gracias a ello AngularJS reacciona y ejecuta la acción que hayamos asignado a dicha directiva. Por ejemplo, incrustar código html, botones…

Sin profundizar mucho en el tema, tenemos dos tipos de directivas:

Las directivas nativas, que son las que ya incorpora AngularJS en sus librerías. Por ejemplo: ng-app, ng-init, ng-model, ng-bind…
Las directivas custom, que son las que creamos nosotros para enriquecer el framework.
Los atributos más comunes para las directivas son:

Restrict: atributo que indica a la directiva qué tipo de invocación hará ejecutar el código de la misma. Acepta los siguientes parámetros. (Ejemplos con una directiva de nombre forcode)
A: Cuando un atributo de un elemento del DOM sea el nombre de la directiva.

<div forcode ></div>

C: En este caso, se invocará a la directiva cuando el nombre de esta aparezca dentro del atributo class de un elemento del DOM.

<div class='forcode'></div>

M: Cuando una directiva tenga este parámetro como restrict, se invocará cuando esté el nombre de la directiva como un comentario en el DOM.

<!—directive: forcode -->

E: En este caso, la directiva se invocará cuando detecte un tag en el DOM, con el nombre de la directiva.

<forcode></forcode>

EA: : La directiva se invocará de dos maneras, tanto si usamos el caso de A, como si usamos el caso de E.

<div forcode ></div>
<!-- o -->
<forcode></forcode>

Template: sirve para construir el HTML que tendrá la directiva.

template: '<div>Hola forCoders</div>';

TemplateUrl: se usa para asignar una ruta hacia el html que usará la directiva.

template: '/app/views/directiva.html';

Scope: se usa para crear scope hijo o un scope aislado. También sirve para coger los parámetros que le pasemos a la directiva y usarlos en nuestro código.
«@»: Usado para variables del $scope o por valor. (Ej. affixed=»{{obj}}»)
«=»: Usado para pasar datos entre vista-controlador o por referencia. (Ej. title=»title»)
«&»: Muy usados para llamar a funciones. (Ej. show=»getSomeData(obj)»)

<forcode affixed='{{obj}}'
         title='title'
         show='getSomeData(obj)'></forcode>

Controller: atributo para asociar un controlador a la directiva. También podemos asignar una función, aunque queda más limpio del primer modo.

controller: 'directivaController'
// o
controller: function($scope, $element, $attrs){  }

Link: función para realizar acciones en el DOM.
Ejemplo de Directiva

app.directive('forcode', function () {
    return {
        restrict: 'AE',
        scope: {
            affixed: '='
        },
        templateUrl: '/app/views/directive.html',
        controller: 'navbarController'
    }
});

Nada más, tengo como tarea pendiente ir añadiendo varios posts con componentes útiles para nuestras webs usándolos en AngularJS. Así que estad atentos!