AngularJS でアイソトープを使用しようとしています (一連の「カード」をレイアウトするため)。DOM に直接追加する代わりに、container.isotope('insert',element) を使用してアイソトープ経由で要素を追加します。
これはすべてリンク関数で行いますが、リンク関数で DOM に何かを挿入すると、サイズが正しく設定されていないように見えます (私の場合、高さは 0)。そのため、要素が描画されません。ちゃんと。
ウィンドウのサイズを変更すると、要素が正しく描画されます。$viewContentLoaded の監視を使用してアイソトープのレイアウトを更新する関数 (つまり、container.isotope('reLayout')) を呼び出すことができると考えていましたが、$viewContentLoaded イベントが発生しないようです。私は何か間違ったことをしていますか、それとも使用すべき他の方法論がありますか?
編集: scope.$root.$on('$viewContentLoaded',function(){}); を実行して関数を実行しました。しかし、それは役に立ちませんでした...(早期に呼び出されたようです)
EDIT 2:さらに遊んだ後、divはアイソトープで適切に追加されていますが、親divの高さが0であるため、子のサイズが適切に設定されています。setTimeout(element.isotope('relayout'),100) を実行すると、正常に動作します。これを模倣する方法はありますか?
module.directive('tileGrid',function(){
var mytemplate = '<div class="item {{card.class}}">{{card.Title}}</div>';
var original = angular.element(mytemplate);
return {
    restrict: 'A',
    replace: true,
    transclude: true,
    template: '<div id="tileGridContainer"></div>',     
    link: function(scope,element,attrs)
        { 
            element.isotope({itemSelector:'.item',layoutMode:'fitRows'});                               
            var curCards = scope.cards.map(function(a){ return a.nextView;});                                               
            scope.$watch('scope.cards',function()
            {       
//will do this for diff, but for now iterate over all elements
                for(var i=0;i<scope.cards.length;i++)
                {                           
                    var card = scope.cards[i];
                    var childScope = scope.$new();
                    childScope.card = card;
                    scope.compile(original)(childScope,function(clonedElement,childScope){                          
                        element.isotope('insert',clonedElement);                            
                    });
                    scope.$on('$viewContentLoaded', function(){ console.log("view loaded"); });
                }
            }
            );              
        }
    };
});