Mit A directive
können Sie das HTML-Vokabular deklarativ erweitern, um Webkomponenten zu erstellen. Das ng-app
Attribut ist eine Direktive, genau ng-controller
wie alle anderen ng- prefixed attributes
. Richtlinien können sein attributes
, tags
oder sogar class
names
, comments
.
Wie Direktiven geboren werden ( compilation
und instantiation
)
Kompilieren: Wir werden die compile
Funktion sowohl für manipulate
das DOM verwenden, bevor es gerendert wird, als auch eine link
Funktion zurückgeben (die die Verknüpfung für uns übernimmt). Hier können auch alle Methoden platziert werden, die mit allen instances
Richtlinien dieser Richtlinie geteilt werden müssen.
link: Mit dieser link
Funktion 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){
}
};
});
Compile
Funktion gibt die pre
und post
Link-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.
Post
Bei der Link-Funktion ist die Post-Link-Funktion die letzte auszuführende Funktion. Jetzt transclusion
ist das abgeschlossen the template is linked to a scope
und das view will update with data bound values after the next digest cycle
. Die link
Option ist nur eine Verknüpfung zum Einrichten einer post-link
Funktion.
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
}
}
});