$ element的offsetHeight在不应该被事件捕获时变为0

时间:2018-05-30 08:54:04

标签: javascript angularjs

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

0 个答案:

没有答案