Bu işlev çağrıları arasında başka neler olur?
Çeşitli direktifi işlevleri iki adlandırılan diğer açısal fonksiyonları içinden yürütülür $compile
(yönerge en compile
yürütülür) ve adlandırılan dahili fonksiyonu nodeLinkFn
(yönerge en controller
, preLink
ve postLink
yürütülür). Direktif fonksiyonlar çağrılmadan önce ve sonra açısal fonksiyon içinde çeşitli şeyler meydana gelir. Belki de en önemlisi çocuk özyineleme. Aşağıdaki basitleştirilmiş çizim, derleme ve bağlantı aşamalarındaki önemli adımları göstermektedir:
Bu adımları göstermek için aşağıdaki HTML işaretlemesini kullanalım:
<div ng-repeat="i in [0,1,2]">
<my-element>
<div>Inner content</div>
</my-element>
</div>
Aşağıdaki yönergeyle:
myApp.directive( 'myElement', function() {
return {
restrict: 'EA',
transclude: true,
template: '<div>{{label}}<div ng-transclude></div></div>'
}
});
derleme
compile
API görünüyor böylece gibi:
compile: function compile( tElement, tAttributes ) { ... }
Genellikle, t
öğelerin ve sağlanan özniteliklerin örnek yerine kaynak şablondakiler olduğunu belirtmek için parametrelerin önüne eklenir .
compile
Aktarılan içeriğe yapılan çağrıdan önce (varsa) kaldırılır ve şablon işaretlemeye uygulanır. Böylece, compile
işleve sağlanan eleman şöyle görünecektir:
<my-element>
<div>
"{{label}}"
<div ng-transclude></div>
</div>
</my-element>
Aktarılan içeriğin bu noktada yeniden eklenmediğine dikkat edin.
Direktifin çağrısının ardından .compile
Angular, direktif tarafından henüz getirilmiş olanlar da dahil olmak üzere tüm alt öğeleri (örneğin şablon öğeleri) geçecektir.
Örnek oluşturma
Bizim durumumuzda, yukarıdaki kaynak şablonun üç örneği (tarafından ng-repeat
) oluşturulacaktır . Bu nedenle, aşağıdaki dizi, örnek başına bir kez üç kez yürütülür.
kontrolör
controller
API içerir:
controller: function( $scope, $element, $attrs, $transclude ) { ... }
Bağlantı aşamasına girildiğinde, döndürülen bağlantı işlevi $compile
artık bir kapsamla sağlanır.
İlk olarak, link işlevi istenirse bir alt kapsam ( scope: true
) veya yalıtılmış bir kapsam ( scope: {...}
) oluşturur.
Daha sonra kontrolör yürütülür, örnek öğesinin kapsamı sağlanır.
Ön bağlantı
pre-link
API görünüyor böylece gibi:
function preLink( scope, element, attributes, controller ) { ... }
Neredeyse hiçbir şey yönergesi en çağrısına arasında olur .controller
ve .preLink
işlevi. Açısal yine de her birinin nasıl kullanılması gerektiğine dair önerilerde bulunur.
.preLink
Çağrının ardından, link işlevi her bir alt öğeyi geçecektir - doğru bağlantı işlevini çağırarak ve ona geçerli kapsamı ekler (alt öğeler için ana kapsam görevi görür).
Sonrası bağlantı
post-link
API benzer olduğu pre-link
işlevin:
function postLink( scope, element, attributes, controller ) { ... }
Bir direktifin .postLink
işlevi çağrıldığında, tüm çocukların .postLink
işlevleri de dahil olmak üzere tüm alt öğelerinin bağlantı sürecinin tamamlandığını fark etmekte fayda var .
Bu .postLink
, çağrıldığında, çocukların 'canlı' olduğu hazırdır. Bu içerir:
- bağlanma verileri
- ekleme uygulandı
- kapsam ekli
Bu aşamadaki şablon böylece şöyle görünecektir:
<my-element>
<div class="ng-binding">
"{{label}}"
<div ng-transclude>
<div class="ng-scope">Inner content</div>
</div>
</div>
</my-element>