A directive, HTML bileşenlerini web bileşenleri oluşturmak için bildirici bir şekilde genişletmenizi sağlar. ng-appÖznitelik bir yönerge, bu nedenle olduğunu ng-controllerve tüm ng- prefixed attributes. Direktifleri olabilir attributes, tagshatta ya class names,comments .
Direktiflerin doğuşu ( compilationve instantiation)
Derleme: Biz kullanacağız compilehem fonksiyon manipulateo hale edilmeden önce DOM ve dönüş linkfonksiyonu (bizim için bağlama idare edecek). Burası aynı zamanda instancesbu direktifin tamamı ile paylaşılması gereken herhangi bir yöntemi koyabileceğiniz yerdir .
link: Biz kullanacağız link(şablondan kopyalamış) ve sayfaya bizim bağlantıları kurmak belirli DOM öğesindeki tüm dinleyicileri kayıt fonksiyonu.
İşlevde ayarlanırsa, compile()yalnızca bir kez ayarlanmış olurlar (bu genellikle istediğiniz şeydir). İşlevde ayarlanırsa link(), HTML öğesi
nesnedeki verilere her bağlandığında ayarlanırlar .
<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){
}
};
});
Compileişlevi preve postbağlantı işlevini döndürür . Ön bağlantı işlevinde örnek şablonuna ve kapsamından da sahibiz controller, ancak yine de şablon kapsama bağlı değildir ve yine de kopyalanmış içeriğe sahip değildir.
Postlink işlevi post link'in yürütülecek son işlev olduğu yerdir. Şimdi transclusiontamamlandı the template is linked to a scope, ve view will update with data bound values after the next digest cycle. linkSeçenek kurma için sadece bir kısa yoldur post-linkişlevi.
denetleyici: Yönerge denetleyicisi başka bir yönerge bağlama / derleme aşamasına geçirilebilir. Direktifler arası iletişimde kullanılması için diğer yönlendirmelere enjekte edilebilir.
Gerekli direktifin adını belirtmelisiniz - Aynı öğeye veya üst öğeye bağlı olmalıdır. Adın önüne ön ek yapılabilir:
? – 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.
[‘directive1′, ‘directive2′, ‘directive3′]Birden fazla yönerge denetleyicisi gerektirmek için köşeli ayraç kullanın .
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
}
}
});