2016-10-04 131 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/ –