
Agenda
- ¿Qué es una directiva en Angular?
- Directivas nativas
- Directivas propias o de terceros
- Tipos
- Scope
- Link
¿Qué es una directiva?
Es un componente utilizado en el HTML y se la puede asignar a cualquier etiqueta por medio de atributos.
Cuando se ejecuta una app Angular, existe un "HTML Compiler" que se encarga de recorrer el documento, localizar las directivas que se hayan utilizado y las ejecuta.
Directivas nativas
- ngApp: Indica cual es el elemento raíz de la aplicación
- ngModel: Informa al "HTML Compiler" que estás usando una variable del modelo.
- ngController: Relación entre un controlador y una vista
- ngShow / ngHide: Oculta o muestra un elemento del HTML en base a una expresión
- muchas más...
Ejemplo
/*SCRIPT.JS*/
angular.module('inputExample', [])
.controller('PersonController', ['$scope', function($scope) {
$scope.personas = 5;
}]);
<!--INDEX.HTML-->
<body ng-app="inputExample">
<form name="formulario" ng-controller="PersonController">
<input type="text" name="personas" ng-model="personas" /><br/>
<span ng-show="personas">Número de personas: {{personas}}</span>
</form>
</body>
Número de personas: 5
5
Output:
Directivas propias/terceros
/*SCRIPT.JS*/
angular.module('inputExample', [])
.controller('personController', ['$scope', function($scope) {
$scope.person = {
firstName: 'Mariano',
lastName: 'Ravinale'
};
}])
.directive('myPerson', function() {
return {
templateUrl: 'my-person.html'
};
});
<!--INDEX.HTML-->
<div ng-controller="personController">
<div my-person></div>
</div>
<!--MY-PERSON.HTML-->
FirstName: {{person.firstName}} <br /> LastName: {{person.lastName}}
Tipos
Hay 4 tipos de directivas que podemos crear
- E (Elemento)
- A (Atributo)
- M (Comentario)
- C (Clase)
También se pueden combinar entre ellos como por ejemplo "AE" y de esta forma la directiva la podemos usar tanto como un tag HTML o como un atributo dentro de una etiqueta.
Para esto, dentro de la directiva podemos agregar el parámetro "restrict"
<my-person></my-person>
<span my-person></span>
<!-- directive: my-person -->
<span class="my-person"></span>
Tipos
/*SCRIPT.JS*/
angular.module('inputExample', [])
.controller('personController', ['$scope', function($scope) {
$scope.person = {
firstName: 'Mariano',
lastName: 'Ravinale'
};
}])
.directive('myPerson', function() {
return {
restrict: 'E',
templateUrl: 'my-person.html'
};
});
<!--INDEX.HTML-->
<div ng-controller="personController">
<my-person></my-person>
</div>
<!--MY-PERSON.HTML-->
FirstName: {{person.firstName}} <br /> LastName: {{person.lastName}}
Scope
El scope de la directiva es el scope del controller de esta directiva.
Si queremos separar los scope, podemos usar la opción "scope" dentro de la directiva y recibir los datos por parámetro.
Esta es una buena práctica para que la directiva se pueda reutilizar.
/*SCRIPT.JS*/
angular.module('inputExample', [])
.controller('personController', ['$scope', function($scope) {
$scope.person = {
firstName: 'Mariano',
lastName: 'Ravinale'
};
}]);
angular.module('inputExample', [])
.directive('myPerson', function() {
return {
restrict: 'E',
scope: {
p: '=personData' /* si el parámetro se llama info, acá usaríamos '=info' */
},
templateUrl: 'my-person.html'
};
});
<!--INDEX.HTML-->
<div ng-controller="personController">
<my-person person-data="person"></my-person>
</div>
Scope
Link
Si queremos hacer cambios dinámicamente en el DOM desde una directiva tenemos que hacerlo a través de la opción "link" y es una función de este tipo:
function link(scope, element, attrs) { ... }
/*SCRIPT.JS*/
angular.module('example', [])
.directive('myColor', function() {
return {
restrict: 'AE',
link: function(scope, element, attrs){
var htmlColor;
switch (attrs.color) {
case "rojo":
htmlColor="#FF0000";
break;
case "verde":
htmlColor="#00FF00";
break;
default:
htmlColor="#000000";
break;
}
element.css("color",htmlColor);
}
};
});
Ejemplo
<!--INDEX.HTML-->
<div ng-controller="personController">
<div my-color color="verde">Color</div>
</div>
Ejemplo Mean-Seed

Making Sense
By joseguti
Making Sense
- 479