2014-06-05 60 views
0

我目前正在一個項目的角度。每次頁面更改時,我都會嘗試顯示加載微調器。要做到這一點,我們使用ngRoute模塊,並聆聽routeChangeStartrouteChangeSuccessrouteChangeError事件。莫代爾加載微調框不顯示第二次

下面的代碼:

$scope.$on('$routeChangeStart', function (event, param) { 
    var html = "<div class='panel-body'>" 
       + "<div class='col-md-4 col-md-offset-4' style='top: 50%;'>" 
        + "<i class='fa fa-spinner fa-spin'></i> Caricamento in corso..." 
       + "</div>" 
      + "</div>"; 

    that.myModal = $modal.open({ 
    template: html, 
    backdrop: 'static' 
    }); 
}); 

$scope.$on('$routeChangeSuccess', function (event, param) { 
    that.myModal.dismiss('nessuna'); 
}); 

$scope.$on('$routeChangeError', function (event, param) { 
    that.myModal.dismiss('nessuna'); 
}); 

這工作,但只有第一次的某一頁被改變。我試圖更好地解釋:當我們在頁面X並導航到頁面Y模態顯示,然後頁面更改後隱藏。如果我回到頁面X並導航到頁面Y再次顯示模態微調器。

調試時,我可以看到modal.open()執行,但它從來沒有顯示過。它看起來像角度是以某種方式延遲命令。

有誰知道爲什麼會發生這種情況?有沒有人遇到過這個問題?

+0

該html是否定義在控制器內,在路由更改後被換出。這也許是模態沒有顯示爲視圖內容有變化的原因。 – Chandermani

+0

這是我們的佈局控制器,所以它在應用程序的每個頁面都可用。 – Th0rndike

+0

MMm ...如果你覺得它有趣,我可以建立一個樣本,這不是一個更好的方法來攔截在應用程序級別的$ http調用並基於此顯示/隱藏(這也適用於你的ajax請求)。 – Braulio

回答

0

無論您保留哪些解決方案來捕捉路線變化事件,我都不明白爲什麼您的模態不會觸發。

Here是一個plunker演示(我用ui-bootstrap來處理模態)。

您可以使用this漂亮的腳本,也稱爲步伐根據http請求自動啓動加載程序。

從他們的資料爲準:

步伐將自動監控您的Ajax請求,事件循環滯後,文件準備狀態,你的頁面上的元素來決定的進展情況。在ajax導航上,它將重新開始!

0

關於顯示微調中俘獲$ HTTP請求,在這裏你有一些信息上手:

http://lemoncode.net/2013/07/31/angularjs-found-great-solution-to-display-ajax-spinner-loading-widget/

Showing Spinner GIF during $http request in angular

的想法是攔截$ HTTP請求和顯示器微調,然後在結束請求或承諾響應(錯誤和成功)檢查是否有未決請求,如果不隱藏微調器。

如果您需要更多信息,請給我一個嗡嗡聲,我已經進一步開發了這個,並採取了一些解決方案的問題,我不想顯示一些特定請求的微調。

+0

我們已經在我們的應用中使用了一個httpInterceptor,所以我知道它是如何工作的。我在注入** $ modal **時遇到了一些麻煩,但是我會弄明白的...讓我們看看它是否比我的「事件監聽器」解決方案更好... :) – Th0rndike