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 ディレクティブを持つ要素の子がレンダリングされた後ではありません。子が見つからないため、refresh の呼び出しは失敗します。
子が処理されたことを確認するにはどうすれば更新を呼び出すことができますか?