offsetHeight из $ element становится 0, когда он перехватывается событием, когда он не должен быть - PullRequest
0 голосов
/ 30 мая 2018

Я хочу вычислить разницу 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);
          });
        }
      }
    };
  }])
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...