2
の要素からoffsetHeightを計算することはできません。要素がまだ内容を持っていないときに高さを計算しているからだと思います。は、私は次のディレクティブを持ってAngularJS
timeout
を使用せずにこの問題を解決するにはどうすればよいですか? この問題の解決策はありますか?
の要素からoffsetHeightを計算することはできません。要素がまだ内容を持っていないときに高さを計算しているからだと思います。は、私は次のディレクティブを持ってAngularJS
timeout
を使用せずにこの問題を解決するにはどうすればよいですか? この問題の解決策はありますか?
問題がng-repeat
でレイジーにレンダリングし、リンク機能は、その前に解雇されます。この問題は、各ダイジェストサイクルでelem[0].offsetHeight
の値を評価するwatcher
という値で解決できます。したがって、ng-repeat
がレンダリングを完了するとダイジェストサイクルが呼び出され、elem[0].offsetHeight
の値が変更されてコールバックが呼び出されます。あなたが行うことができます
指令
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
})
}
};
});
他の代替方法は、あなたがNGリピート要素の上に他のディレクティブを配置することができ、あること、一度イベントがレンダリングで完了$emit
ます&この場合、イベントリスナーinsideディレクティブがあり、そのイベントをリッスンして高さを計算します。
ウォッチャーが一度変更を記録したら、そのウォッチャーを停止させる方法はありますか? – gespinha
@GEspinhaはudpated答えを見てください –
なぜ結果の中で関数を再実行していますか? – gespinha