2016-03-18 17 views
2

angularjs bir öğeden offsetHeight hesaplanamıyor. Bunun nedeni, öğenin henüz herhangi bir içeriği olmadığı zaman yüksekliğini hesaplamasıdır.yönerge şu var

timeout kullanmadan bu sorunu nasıl çözebilirim? Bu sorun için yerleşik bir çözüm var mı?

Plunkr

cevap

1

sorun ng-repeat tembel görüntüleyicilerine ve bağlantı işlevi bundan önce kovuluyor. Bu sorunu, her bir özet döngüsünde elem[0].offsetHeight değerini değerlendirecek watcher alarak çözebilirsiniz. Bu nedenle, ng-repeat bunu tamamladığında, bir özet döngüsünü çağırır ve elem[0].offsetHeight değerindeki değişiklik nedeniyle, onun geri çağrısını çağırır. Yapabileceğiniz

Yönergesi

var app = angular.module('plunker', []); 

app.directive('myObject', function(){ 
    return { 
    restrict: 'A', 
    link: function(scope, elem){ 
     var calculateHeight = scope.$watch(function(){ 
     return elem[0].offsetHeight; 
     }, function(newVal, oldVal){ 
     //my awesome code here. 
     console.log(newVal, oldVal); 
     calculateHeight(); //de-registering watcher for performance reason 
     }) 
    } 
    }; 
}); 

Demo Here


Diğer alternatif yolu ng-repeat eleman üzerindeki diğer yönergesini yerleştirebilirsiniz, hangi buna kez bir olay render ile tamamlar $emit olacak & daha sonra bu olayı dinleyecek ve yüksekliği hesaplayacak olan direktif içinde olay dinleyicisine sahip olacağız.

+0

Tek bir değişiklik kaydettikten sonra izleyiciyi nasıl durdurabilirim? – gespinha

+0

@GEspinha udpated cevaba bakın lütfen –

+0

Neden sonuçtaki işlevi yeniden çalıştırıyorsunuz? – gespinha