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-controller
ve tüm ng- prefixed attributes
. Direktifleri olabilir attributes
, tags
hatta ya class
names
,comments
.
Direktiflerin doğuşu ( compilation
ve instantiation
)
Derleme: Biz kullanacağız compile
hem fonksiyon manipulate
o hale edilmeden önce DOM ve dönüş link
fonksiyonu (bizim için bağlama idare edecek). Burası aynı zamanda instances
bu 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){
}
};
});
Compile
işlevi pre
ve post
bağ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.
Post
link işlevi post link'in yürütülecek son işlev olduğu yerdir. Şimdi transclusion
tamamlandı the template is linked to a scope
, ve view will update with data bound values after the next digest cycle
. link
Seçenek kurma için sadece bir kısa yoldur post-link
iş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
}
}
});