Sto provando ad usare una direttiva JS Angolare per centrare il contenuto di un div.Come richiamare una funzione in una direttiva Angular dopo che i nodi figli sono stati elaborati?
Questa è la versione semplificata del modello:
<div id="mosaic" class="span12 clearfix" s-center-content>
<div ng-repeat="item in hits" id="{{item._id}}" >
</div>
</div>
Questa è la direttiva:
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);
});
}
};
});
Galleggia fondamentalmente alcuni div interni e aggiunge un margine alla prima div in ogni riga, quindi il contenuto è centrato.
Questo funziona correttamente quando il browser viene ridimensionato. Il problema si presenta quando provo a fare un aggiornamento subito dopo l'inizializzazione.
Ho provato con la funzione di collegamento post come visto in this question. Le funzioni pre link e post link vengono richiamate nell'ordine previsto ma non dopo che i figli di elemenet con la direttiva s-center-content vengono visualizzati. La chiamata all'aggiornamento fallisce poiché non vengono trovati bambini.
Come posso effettuare una chiamata per l'aggiornamento assicurando che i bambini siano stati elaborati?
Ben fatto, questo è molto utile! Proverò a trovare il thread del gruppo di google e il problema in modo angolare che parla di questo problema e farò riferimento alla tua risposta. –
Grazie per lo sforzo Roy. –
Se guardate i plugin [code] (https://github.com/brandonaaron/livequery/blob/master/jquery.livequery.js), si noterà che ha usato anche 'setTimeout (fn, 20)' per abbina nuovi elementi. Quindi è una soluzione sporca in 'pacchetto' vista amichevole. – FelikZ