【发布时间】:2017-06-19 09:01:03
【问题描述】:
我有一个 ul,它使用 ng-repeat 从数组加载数据。数组非常大,列表的负载持续时间太多。
我想放置一个加载器,使其在加载开始时显示并隐藏,这是重要的部分,当 ul 完全呈现在 html 中时。 我的问题是,当 ul 完全呈现时,我找不到抛出函数的方法。
我现在的方法是:
控制器:
function renderMatters() {
api_horus.getMatters()
.success(function (data)
{
$scope.matters = data.matters;
}
})
.error(function (error) {
status = 'Unable to load matters data: ' + error.message;
});
}
HTML:
<ul ng-model="matters" class="list clearfix" ng-class="{'floatingList':isHorizontal}">
<li ng-repeat="matter in filtered = (matters | filter:searchText) class="matter_grid_li">
…
我已经尝试过这些可能的解决方案:
1.使用 ngRoute 和 $viewContentLoaded:
在 angular-directive.js 中
$scope.$on('$viewContentLoaded', function() {
App.initComponent();
alert("Loaded");
});
这可行,但是当完全加载时不会抛出警报,而是或多或少的一半。
2。使用模板、ng-include 和 onload
我把 ul 放到一个不同的文件中,并把它作为模板调用
<div ng-include src="'template/test-loading.html'" onload="alert(‘ends’);"></div>
它也不起作用。警报显示在负载中间。 我什至尝试将 ng-repeated li 作为模板而不是 ul,因为我读到只有在加载 PARENT 元素时才会抛出 onload。也没有成功。
我如何知道一个元素何时在 HTML 中完全呈现?
提前发送。
【问题讨论】:
-
您是否尝试过在 componentInit 函数中使用回调?
-
您可以使用
$last来检测最后一个元素的渲染。所以在$last的基础上,你可以做你想做的事 -
从用户体验的角度来看,如果列表足够大,您可能应该尝试某种形式的分页,这也将减少渲染页面所花费的时间
-
我已经在函数内部尝试了回调,但我不需要知道函数何时结束,我明白了。问题是 HTML 中的渲染持续时间远不止这些。我需要知道 ul 渲染的结束
-
我喜欢最后一种方法。不是超级干净,但它可以工作,会检查
标签: javascript html angularjs