¡Esta es una revisión vieja del documento!
Tabla de Contenidos
9.3 Funcion Link
Hasta hora hemos visto como definir una la directiva de forma declarativa, es decir especificando como debe comportarse la directiva. Lo último que nos falta ver en esta unidad es añadir una función que se ejecutará al iniciarse la directiva. A esta función se le llama la función “link”. Para definirla deberemos añadir dicha función a la propiedad link del objeto con la definición de la directiva.
La función link acepta 4 parámetros que son:
scope: Es elscopede nuestra directivaiElement: Es un elemento DOM del tag raiz del template. Está encapsulado como si fuera un elemento de jQuery llamadojqLiteiAttrs: Son todos los atributos de se han puesto en la directiva “normalizados” 1).controller: Veremos esta función en la unidad 00_starttranscludeFn: Veremos esta función en la unidad 00_start
Vamos a modificar la directiva acTitulo del tema anterior haciendo que se pueda elegir el color , solo que vamos a permitir que se haga usando colores en castellano en vez de en inglés. Para ello vamos a tener que modificar la directiva para transformar el color de castellano al formato del color de HTML.
Vamos a hacer que la directiva se pueda usar de la siguiente manera:
app.directive("acTitulo",[function() {
var directiveDefinitionObject ={
restrict:"E",
replace : true,
template:"<h1>{{texto}}</h1>",
scope:{
texto:"@"
},
link:function(scope, iElement, iAttrs, controller, transcludeFn) {
var htmlColor;
switch (iAttrs.color) {
case "rojo":
htmlColor="#FF0000";
break;
case "verde":
htmlColor="#00FF00";
break;
case "azul":
htmlColor="#0000FF";
break;
default:
htmlColor="#000000";
break;
}
iElement.css("color",htmlColor);
}
}
return directiveDefinitionObject;
}]);
- Línea 10: Añadimos la nueva función link a la definición de la directiva
- Línea 13: De la lista de atributos de la directiva obtenemos el valor del atributo “color” mediante
iAttrs.color. Y según su valor ponemos el color HTML en hexadecimal. No lo hemos puesto en elscopede la directiva ya que no se usa en el template. - Línea 28: Al objeto
iElementque corresponde con el tag raiz de nuestra directiva, que en este caso es<h1>se cambiamos el estilo CSS poniendo el nuevo color.
$scope del controlador , si se cambiara el valor de la propiedad del $scope del controlador no se modificaría el color del tag <h1>.
Una solución mejor hubiera sido en vez de usar la función link, usar la directiva ngSwitch directamente en el template.
Ejemplo
