A le directive
permite ampliar el vocabulario HTML de manera declarativa para crear componentes web. El ng-app
atributo es una directiva, también lo es ng-controller
y todos los ng- prefixed attributes
. Las directivas pueden ser attributes
, tags
o incluso class
names
,comments
.
Cómo nacen las directivas ( compilation
y instantiation
)
Compilar: Utilizaremos la compile
función tanto para manipulate
el DOM antes de que se procese como para devolver una link
función (que se encargará de la vinculación por nosotros). Este también es el lugar para colocar cualquier método que deba compartirse con todos losinstances
esta directiva.
enlace: Utilizaremos la link
función para registrar a todos los oyentes en un elemento DOM específico (que se clona desde la plantilla) y configurar nuestros enlaces a la página.
Si se configuran en la compile()
función, solo se habrían configurado una vez (que a menudo es lo que desea). Si se establece en la link()
función, se establecerían cada vez que el elemento HTML se vincule a los datos del
objeto.
<div ng-repeat="i in [0,1,2]">
<simple>
<div>Inner content</div>
</simple>
</div>
app.directive("simple", function(){
return {
restrict: "EA",
transclude:true,
template:"<div>{{label}}<div ng-transclude></div></div>",
compile: function(element, attributes){
return {
pre: function(scope, element, attributes, controller, transcludeFn){
},
post: function(scope, element, attributes, controller, transcludeFn){
}
}
},
controller: function($scope){
}
};
});
Compile
La función devuelve la función pre
y post
enlace. En la función de preenlace tenemos la plantilla de instancia y también el alcance de controller
, pero la plantilla no está vinculada al alcance y aún no tiene contenido translúcido.
Post
La función de enlace es donde el enlace de publicación es la última función que se ejecuta. Ahora el transclusion
está completo the template is linked to a scope
, y el view will update with data bound values after the next digest cycle
. La link
opción es solo un atajo para configurar una post-link
función.
controlador: el controlador de la directiva se puede pasar a otra fase de vinculación / compilación de la directiva. Se puede inyectar en otros directorios como un medio para usar en la comunicación inter-directiva.
Debe especificar el nombre de la directiva que se requiere: debe estar vinculada al mismo elemento o su elemento primario. El nombre puede tener como prefijo:
? – Will not raise any error if a mentioned directive does not exist.
^ – Will look for the directive on parent elements, if not available on the same element.
Use corchetes [‘directive1′, ‘directive2′, ‘directive3′]
para requerir múltiples directivas de controlador.
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope, $element) {
});
app.directive('parentDirective', function() {
return {
restrict: 'E',
template: '<child-directive></child-directive>',
controller: function($scope, $element){
this.variable = "Hi Vinothbabu"
}
}
});
app.directive('childDirective', function() {
return {
restrict: 'E',
template: '<h1>I am child</h1>',
replace: true,
require: '^parentDirective',
link: function($scope, $element, attr, parentDirectCtrl){
//you now have access to parentDirectCtrl.variable
}
}
});