我正在尝试使用 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 添加边距,因此内容居中。
当浏览器调整大小时,这可以正常工作。当我在初始化后尝试进行刷新时,问题就来了。
我已尝试使用此问题中所见的帖子链接功能。pre link 和 post link 函数按预期顺序调用,但不是在具有 s-center-content 指令的 elemenet 的子级渲染之后。由于未找到子项,刷新调用失败。
如何调用刷新以确保子项已得到处理?