2016-10-04 83 views
1

我正在使用Anuglar UI Bootstrap Modal打开AngularJs对话框,并在第一次打开模式时遇到性能问题。当对话框出现时,会有明显的口吃以及页面上某些隐藏元素的闪烁。随后所有模式都会打开对话框,而不会出现任何口吃。Prerender Angular UI Modal

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

我使用的角度UI莫代尔服务,像这样

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

我想是这样的指令,但我需要的东西,会在控制器/对话工作。

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

我使用的角度1.5.8和角度的UI,引导1.3 这个问题在所有浏览器和桌面和移动显示出来,但它在低功率硬件最显着的(手机,平板电脑)

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

+0

我自己从来没有遇到过这个问题,并且广泛地使用了他们的模块,即使是像谷歌地图这样的东西。创建一个再现问题 – charlietfl

+0

外观的演示。我使用另一种方法:我创建一个与类模式的div,并在div中,我使用立即包含模板。 –

回答

2

使用解决方案确保在打开模式之前数据已准备就绪。

下面是一个来自文档的示例。

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来代替。

+0

我已经预先加载了表单使用的数据,所以似乎没有问题。该视图在打开时不加载任何数据。这个问题似乎是在渲染视图。它只在第一次打开模式时发生。其他所有时间都可以顺利开启。 –

+0

好吧,我正在做一个假设,因为我的信息有限。正如@charlietfl提到的,你可以创建一个重现问题的演示? – defaultcheckbox

+0

这是我的基本情况。这并没有显示出明显的效果,但您可以看到与后续调用相比,第一次打开模式会稍微慢一些。此外,这似乎是硬件依赖。更快的CPU/GPU可能不会显示它。例如,在iPhone上,效果更明显。 https://embed.plnkr.co/hDM6GrUh8droo988MOox/ –