Я пытаюсь использовать директиву Angular JS для центрирования содержимого div.
Это упрощенная версия шаблона:
<div id="mosaic" class="span12 clearfix" s-center-content>
<div ng-repeat="item in hits" id="{{item._id}}" >
</div>
</div>
Это директива:
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);
});
}
};
});
В основном он плавает некоторые внутренние div и добавляет маркер к первому div в каждой строке, поэтому содержимое центрируется.
Это отлично работает при изменении размера браузера. Проблема возникает, когда я пытаюсь выполнить обновление сразу после инициализации.
Я пробовал с функцией связывания сообщений, как показано в этом вопросе. Функции предварительной ссылки и пост-ссылки вызывают в ожидаемом порядке, но не после того, как будут отображены дочерние элементы элемента с директивой s-center-content. Вызов обновления завершается неудачей, так как ни один из них не найден.
Как мне сделать звонок для обновления, обеспечив обработку детей?