Я хочу вычислить разницу offsetHeight между дочерним и родительским элементом.Но и parentHeight и tableHeight здесь равны нулю.
Я могу проверить разницу с помощью angular.element ('parent-table') [0].offsetHeight на консоли, и это дает правильное значение.
Вы можете спросить: «Почему тогда вы не используете селектор angular.element?».Я не могу, потому что это директива многократного использования, и на одной и той же странице много раз, и мне любопытно, почему она дает ноль, когда ее явно нет.
Я подозреваю, что как-то теряет данные, когдаон работает асинхронно из-за $ scope. $ on, но как и почему?
Также приведенный ниже код находится в контроллере, но он работает так же в директиве.
$scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) {
$window.setTimeout(function () {
if(!vm.paging && vm.horizontalScrolling) {
if(getOverflowHeight()) {
console.log("rows overflow by " + getOverflowHeight());
}
}
}, 500);
});
function getOverflowHeight() {
var parentHeight = $element.find('.parent-table')[0].offsetHeight;
var tableHeight = $element.find('.parent-table table')[0].offsetHeight;
var difference = tableHeight - parentHeight;
if(difference > 0) {
return difference
}
return false;
}
директива ngRepeatFinished:
(function () {
'use strict';
angular.module('myModule') .directive('onFinishRender', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
$timeout(function () {
scope.$emit(attr.onFinishRender);
});
}
}
};
}])
})();