【发布时间】:2015-08-14 03:10:44
【问题描述】:
我正在尝试使用 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添加一个边距,因此内容居中。
调整浏览器大小时,这可以正常工作。当我在初始化后尝试进行刷新时,问题就出现了。
我已尝试使用this question 中的帖子链接功能。 pre link 和 post link 函数按预期顺序调用,但不是在具有 s-center-content 指令的 elemenet 的子级被渲染之后。由于找不到子节点,刷新调用失败。
如何调用 refresh 以确保子项已得到处理?
【问题讨论】:
标签: angularjs angularjs-directive