【问题标题】:Prerender Angular UI Modal预渲染 Angular UI 模态
【发布时间】:2016-10-04 19:00:50
【问题描述】:

我正在使用 Anuglar UI Bootstrap Modal 打开一个带有 AngularJs 的对话框,并且在第一次打开该模态时遇到了性能问题。当对话框出现时,页面上的一些隐藏元素会出现明显的卡顿和闪烁。模态打开对话框的所有后续时间都流畅地显示,没有任何口吃。

我认为这是由于编译视图的一次性计算开销。有什么方法可以在我的应用程序的后台预编译模式,以便当用户打开对话框时它就可以开始了。

我正在像这样使用 Angular UI Modal 服务

$uibModal.open({
    templateUrl:'my-modal.html',
    controller:'MyModalCtrl'
});

我为指令尝试了类似的东西,但我需要一些适用于控制器/对话框的东西。

var directive = $compile("<my-directive></my-directive>");
var instance = directive(scope.$new(true));

我正在使用 angular 1.5.8 和 angular-ui-bootstrap 1.3 此问题出现在所有浏览器以及台式机和移动设备上,但在功率较低的硬件(手机、平板电脑)上最为明显

https://embed.plnkr.co/hDM6GrUh8droo988MOox/

【问题讨论】:

  • 我自己从来没有遇到过这个问题,并且已经广泛使用了他们的模态,即使里面有谷歌地图之类的东西。创建一个重现问题的演示
  • 看。我使用另一种方法:我使用类模态创建一个 div,在 div 中,我使用 立即包含模板。

标签: angularjs angular-ui-bootstrap angular-ui


【解决方案1】:

使用 resolve 来确保数据在模式打开之前就准备好了。

这是文档中的一个示例。

var modalInstance = $uibModal.open({
      animation: $ctrl.animationsEnabled,
      ariaLabelledBy: 'modal-title',
      ariaDescribedBy: 'modal-body',
      templateUrl: 'myModalContent.html',
      controller: 'ModalInstanceCtrl',
      controllerAs: '$ctrl',
      size: size,
      resolve: {
        items: function () {
          return $ctrl.items;
        }
      }
    });

此外,请远离模式上的 {{}}(如果您正在使用该模式)并改用 ng-bind。

【讨论】:

  • 我已经在预加载表单使用的数据,所以这似乎不是问题。视图在打开时不会加载任何数据。问题似乎在于渲染视图。它仅在第一次打开模式时发生。其他时间都可以顺利打开。
  • 好吧,我在做一个假设,因为我的信息有限。正如@charlietfl 提到的,您可以创建一个重现问题的演示吗?
  • 这是我的基本情况。这并没有显示出如此显着的效果,但是您可以看到与后续调用相比,第一次打开模式的速度要慢一些。这似乎也取决于硬件。更快的 CPU/GPU 可能不会显示它。例如,在 iPhone 上效果更明显。 embed.plnkr.co/hDM6GrUh8droo988MOox
猜你喜欢
  • 2020-12-16
  • 2020-05-12
  • 2015-06-15
  • 2022-12-03
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2023-04-06
相关资源
最近更新 更多