javascript - 如何在加载 DOM 后停止微调器

标签 javascript angularjs dom

我正在加载大量数据,即使在收到数据后,似乎也需要几秒钟来绘制页面。

我正在简化下面的代码,所以请原谅这个玩具示例中的任何语法错误。 我的 angularjs 代码的结构或多或少是这样的

$scope.isLoading = true;
$http.get(url)
  .then(function(resp) {
    $scope.mydata = resp.data;
  })
  .finally(function() {
    $scope.isLoading = false;
  })

我的 html 是

<div class="spinner" ng-show="isLoading">
...
<!-- lots of data and complex DOM manipulation below -->

我也试过

<div class="spinner" ng-hide="mydata">
...
<!-- lots of data and complex DOM manipulation below -->

在这两种情况下,我都会得到一个微调器,然后微调器消失,然后几秒钟过去,数据最终显示出来。如果数据较小,则延迟不太明显。

当我查看浏览器的开发人员工具时,收到数据并且微调器立即消失。然后在页面最终加载之前发生多秒延迟。所以我怀疑浏览器正在尝试编写 DOM

我想缩短微调器消失和页面出现之间的延迟。

在编写完所有 DOM 后是否会调用某种 Hook /回调?

最佳答案

由于视觉延迟是由 DOM 在摘要上同步更新并阻塞主线程这一事实引起的,因此应该至少推迟 spinner 移除一个 tick:

$http.get(url)
  .then(function(resp) {
    $scope.mydata = resp.data;
  })
  .finally(function() {
    return $timeout(function () {
      $scope.isLoading = false;
    })
  })

超时延迟可以增加到非零值(例如 20),具体取决于导致卡住的应用程序部分的工作方式。由 $timeout 引起的新摘要可能会导致新的卡住,因此该问题可能应该通过优化来解决。

关于javascript - 如何在加载 DOM 后停止微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47340695/

相关文章:

php - 如何在 PHP 文件执行期间调用 javascript 文件。

javascript - 如果并发调用请求数据仍在加载,如何等待异步 angularJS 调用完成?

javascript - 检查复选框是否有类并且被选中

jquery - 如何使用 jQuery 获取相同兄弟元素中嵌套元素的 DOM 位置?

JavaScript 正则表达式问题

javascript - 使用外部服务验证表单

javascript - 将 URL 加载到 CSS 动画滑动 iframe

javascript - 为什么 JavaScript CSS 类会破坏此脚本?

javascript - 如何计算单选按钮组所需的 ng 错误?

javascript - 根据使用 Web 服务获取信息的另一个下拉框的选择填充第二个下拉框