Mit A directivekönnen Sie das HTML-Vokabular deklarativ erweitern, um Webkomponenten zu erstellen. Das ng-appAttribut ist eine Direktive, genau ng-controllerwie alle anderen ng- prefixed attributes. Richtlinien können sein attributes, tagsoder sogar class names, comments.
Wie Direktiven geboren werden ( compilationund instantiation)
Kompilieren: Wir werden die compileFunktion sowohl für manipulatedas DOM verwenden, bevor es gerendert wird, als auch eine linkFunktion zurückgeben (die die Verknüpfung für uns übernimmt). Hier können auch alle Methoden platziert werden, die mit allen instancesRichtlinien dieser Richtlinie geteilt werden müssen.
link: Mit dieser linkFunktion registrieren wir alle Listener für ein bestimmtes DOM-Element (das aus der Vorlage geklont wurde) und richten unsere Bindungen für die Seite ein.
Wenn sie in der compile()Funktion eingestellt wären, wären sie nur einmal eingestellt worden (was oft das ist, was Sie wollen). Wenn sie in der link()Funktion festgelegt sind, werden sie jedes Mal festgelegt, wenn das HTML-Element an Daten im
Objekt gebunden wird.
<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){
}
};
});
CompileFunktion gibt die preund postLink-Funktion zurück. In der Pre-Link-Funktion haben wir die Instanzvorlage und auch den Bereich aus dem controller, aber die Vorlage ist nicht an den Bereich gebunden und hat noch keinen transkludierten Inhalt.
PostBei der Link-Funktion ist die Post-Link-Funktion die letzte auszuführende Funktion. Jetzt transclusionist das abgeschlossen the template is linked to a scopeund das view will update with data bound values after the next digest cycle. Die linkOption ist nur eine Verknüpfung zum Einrichten einer post-linkFunktion.
Regler: Der Direktivencontroller kann an eine andere Direktivenverknüpfungs- / Kompilierungsphase übergeben werden. Es kann in andere Direktiven eingefügt werden, um es in der Kommunikation zwischen Direktiven zu verwenden.
Sie müssen den Namen der erforderlichen Anweisung angeben. Sie sollte an dasselbe Element oder dessen übergeordnetes Element gebunden sein. Dem Namen kann Folgendes vorangestellt werden:
? – 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.
Verwenden Sie eine eckige Klammer, [‘directive1′, ‘directive2′, ‘directive3′]um einen Controller mit mehreren Anweisungen zu benötigen.
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
}
}
});