我想计算子元素和父元素之间的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);
});
}
}
};
}])
})();