Ich versuche eine Angular JS-Direktive zu verwenden, um den Inhalt eines div zu zentrieren.Wie kann eine Funktion in einer Angular-Direktive aufgerufen werden, nachdem die Kindknoten verarbeitet wurden?
Dies ist die vereinfachte Version der Vorlage ist:
<div id="mosaic" class="span12 clearfix" s-center-content>
<div ng-repeat="item in hits" id="{{item._id}}" >
</div>
</div>
Dies ist die Richtlinie:
module.directive('sCenterContent', function() {
var refresh = function(element){
var aWidth= element.innerWidth();
var cWidth= element.children()[0].offsetWidth;
var cHeight= element.children()[0].offsetHeight;
var perRow= Math.floor(aWidth/cWidth);
var margin=(aWidth-perRow*cWidth)/2;
if(perRow==0){
perRow=1;
}
var top=0;
element.children().each(function(index, child){
$(child).css('margin-left','0px');
if((index % perRow)==0){
$(child).css('margin-left',margin+'px');
}
});
};
return {
link : function(scope, element, attrs) {
$(window).resize(function(event){
refresh(element);
});
}
};
});
Es schwimmt im Grunde einige innere divs und fügt eine Marge auf den ersten div in jeder Reihe, also ist der Inhalt zentriert.
Dies funktioniert gut, wenn der Browser die Größe ändert. Das Problem tritt auf, wenn ich versuche, nach der Initialisierung eine Aktualisierung durchzuführen.
Ich habe mit der Post-Linking-Funktion wie in this question gesehen versucht. Die Pre-Link- und Post-Link-Funktionen werden in der erwarteten Reihenfolge aufgerufen, aber nicht nachdem die Children des Elemenet mit der s-center-content-Direktive gerendert wurden. Der Aufruf zum Aktualisieren schlägt fehl, da keine Kinder gefunden werden.
Wie kann ich einen Anruf tätigen, um sicherzustellen, dass die Kinder verarbeitet wurden?
Gut gemacht, das ist sehr praktisch! Ich werde versuchen, den Google-Gruppen-Thread und das Problem in eckig zu finden, das über dieses Problem spricht, und ich werde auf Ihre Antwort verweisen. –
Danke für die Mühe Roy. –
Wenn Sie sich die Plugins [code] (https://github.com/brandonaaron/livequery/blob/master/jquery.livequery.js) ansehen, werden Sie feststellen, dass sie auch 'setTimeout (fn, 20)' to verwendet hat Passe neue Elemente an. Es ist also eine schmutzige Lösung in freundlicher 'Pack'. – FelikZ