2016-09-16 51 views
-1

我有以下代碼。它會檢查每幾分鐘輪詢一次服務器的工廠。它工作正常,但我想在打開模式時暫停「fetchDataContinously」方法,並在模式關閉時恢復它。總之,我需要找到一種方法來打開和關閉模態時切換「fetchDataContinously」。請告知,或者如果我的問題不清楚,請告訴我。

angular.module('NavBar', []).controller('NavBarCtrl', function NavBarCtrl($scope,$modal,$timeout,MyPollingService) { 

    var ctrl = this; 
    fetchDataContinously(); 

    function fetchDataContinously() { 
     MyPollingService.poll().then(function(data) { 


     if(data.response[0].messages[0].important_popup){ 
      ctrl.showImportantNotice(data.response[0].messages[0]); 
      return; 
     } 
     $timeout(fetchDataContinously, 3000); 
     }); 
    } 
    ctrl.showNotices = function() { 
     var noticesModalOptions = { 
      templateUrl: "notices.html", 
      controller: "NoticesCtrl", 
      controllerAs: "ctrl", 
      show: true, 
      scope: $scope, 
      resolve: { 
       notices: function(NoticesFactory) { 
        return NoticesFactory.getMessages(); 
       } 
      } 
     } 

     var myNoticesModal = $modal(noticesModalOptions); 
     myNoticesModal.$promise.then(myNoticesModal.show); 
    } 

    ctrl.showImportantNotice = function (importantNotice) { 
    ctrl.importantNotice = importantNotice; 
    var importantNoticeModalOptions = { 
     templateUrl: "/importantNotice.html", 
     controller: "ImportantNoticeCtrl", 
     controllerAs: "ctrl", 
     show: true, 
     scope: $scope, 
     onHide: function() { 
      console.log("Close !"); 
      fetchDataContinously(); 
     }, 
     onShow: function() { 
      console.log("Open !"); 
     } 
    } 

    var myImportantNoticeModal = $modal(importantNoticeModalOptions); 
    myImportantNoticeModal.$promise.then(myImportantNoticeModal.show); 
} 

})

+0

對,所以,當模式打開時,取消超時,然後當它關閉時,重新啓動它。 –

+0

我認爲那是我迷路的地方。我怎樣才能從fetchDataContinously函數外部取消$超時...例如,我怎麼能在importantNoticeModalOptions.onHide – defaultcheckbox

+1

內部執行它,我甚至沒有看到在你的代碼中調用$ timeout – charlietfl

回答

1

裹在功能上你$timeout並返回它的承諾

var timer; 
function startPolling(){ 
    return $timeout(pollData, 3000); 
} 
// start it up 
timer = startPolling(); 

取消:

$timeout.cancel(timer); 

然後重新開始:

timer = startPolling();