Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularjs ngRepeat table,获取高度错误_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

angularjs ngRepeat table,获取高度错误

angularjs ngRepeat table,获取高度错误,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,加载页面时,我无法获取表格的高度 我试图获取激发事件$viewContentLoaded时的高度,但表的高度等于表标题栏的高度。我的桌子看起来像这样: 如何获得桌子的正确高度?非常感谢 这是我的密码: $scope.$on('$viewContentLoaded', function(){ var elem = angular.element(document.getElementById('ng-repeat-table-test')); console.log(elem.h

加载页面时,我无法获取表格的高度

我试图获取激发事件$viewContentLoaded时的高度,但表的高度等于表标题栏的高度。我的桌子看起来像这样:

如何获得桌子的正确高度?非常感谢

这是我的密码:

$scope.$on('$viewContentLoaded', function(){
    var elem = angular.element(document.getElementById('ng-repeat-table-test'));
    console.log(elem.height());
});
Chrome Developer工具测量的实际工作台高度为234px。但是,上面的代码打印出100px,这是标题栏的高度

更多代码: 用于呈现表的代码:

 <table id="ng-repeat-table-test">
     <tr id="title">
         <td>Car Types</td>
     </tr>
     <tr class="row" ng-repeat="car in cars">
         <td>{{car.name}}</td>
     </tr>
  </table>

Angular完成编译时会触发$viewContentLoaded上的一小段代码,这并不意味着浏览器已呈现DOM

因此,在您的例子中,问题是当执行$viewContentLoaded的回调时,表还没有绘制行,这就是为什么您得到了错误的高度

尝试使用$timeout延迟(移动到队列末尾)执行该操作,以便在获得元素高度之前可以操纵DOM

$scope.$on('$viewContentLoaded', function(){
  $timeout(function () {
     var elem = angular.element(document.getElementById('ng-repeat-table-test'));
     console.log(elem.height());
  });
});

显示一些代码以接收帮助谢谢提醒。添加了代码。我创建了一个JSFIDLE用于演示,包括html、css和js代码。过来看。谢谢你的帮助。:)谢谢你的帮助。代码运行良好!只是好奇一下,$超时是唯一的解决方案吗?有可能在DOM完成渲染后发现事件火灾吗?我可以考虑其他解决方法,但$timeout可能是最好的。目前不可能知道渲染何时完成,因为。我明白了。我很惊讶没有这样的事件存在。我的意思是这样的活动在某些情况下非常有用。我还担心美元超时。如果表有一个巨大的数据集,并且ngRepeat需要很长时间才能填充,那么$timeout可能无法处理这种情况。这是正确的吗?不必担心,Javascript和DOM呈现是串行的(同一线程),所以当我们用超时重新安排执行时,我们会将这段代码放在队列的末尾,这将保证呈现在队列之前完成。看一看很棒的。很高兴知道$timeout可以在队列末尾重新安排执行。非常感谢你的帮助。今天我从你那里学到了很多。
$scope.$on('$viewContentLoaded', function(){
  $timeout(function () {
     var elem = angular.element(document.getElementById('ng-repeat-table-test'));
     console.log(elem.height());
  });
});