【问题标题】:Check when a list is fully rendered with angular检查列表何时用角度完全呈现
【发布时间】: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


【解决方案1】:

只需创建一个 div

<div ng-if="showMsg">{{msg}}</div>
<div ng-if="!showmMsg">
<ul ng-model="matters" class="list clearfix" ng-class="     {'floatingList':isHorizontal}">
  <li ng-repeat="matter in filtered = (matters | filter:searchText) class="matter_grid_li"></div>

在控制器中:

 $scope.showMsg = true;
 $scope.msg = "loading...";
 function renderMatters() {
    api_horus.getMatters()
       .success(function (data) 
       {
           $scope.matters = data.matters;
            $scope.showMsg = false;
            $timeout(angular.noop)
       }

    })
    .error(function (error) {
        status = 'Unable to load matters data: ' + error.message;
    });

   }

【讨论】:

  • 这将等到函数 renderMatters 完成,但是当它完成时,HTML 中的列表还没有完全加载
猜你喜欢
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2013-09-20
  • 2023-03-10
  • 1970-01-01
  • 2011-06-29
  • 2023-03-18
相关资源
最近更新 更多