我在页面上用 ng-repeat 循环输出了 list,通过点击按钮,我又向 list 中新添加了 10 个元素。这时候,列表的 height 应该变高了,我怎么能立刻获取到这个新的高度哩?
<!doctype html>
<html lang="en" data-ng-app="myApp">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
#box {
width: 100px;
height: 300px;
overflow-y: scroll;
}
</style>
</head>
<body>
<div data-ng-controller="ScrollCtrl">
<ul id="box">
<li data-ng-repeat="item in list">{{item}}</li>
</ul>
<button type="button" data-ng-click="add()">Add</button>
</div>
<script src="jquery.min.js"></script>
<script src="angular.min.js"></script>
<script>
angular.module('myApp', [])
.controller('ScrollCtrl', function ($scope) {
$scope.list = [3, 2, 1];
$scope.boxScrollHeight = function () {
var box = angular.element('#box');
return box.get(0).scrollHeight;
};
$scope.add = function () {
console.log('before:', $scope.boxScrollHeight());
var last = $scope.list[0];
for (var i = 1; i <= 10; i++) {
$scope.list.unshift(last + i);
}
console.log('after:', $scope.boxScrollHeight());
};
});
</script>
</body>
</html>
点击按钮后,数据应该是立即改变了,但是数据改变到更新 DOM 还有一段时间。控制台输出的 before 和 after 是一样的。也就是获取 after 的高度时 DOM 还没有更新,如何才能获取到增加后的高度?
为什么一定要在数据更新完后就取数据?你完全可以先不管他,等你操作视图时在获取数据不就行了。